Wat is Uitlijning en padding (alignment and padding)?

Gegevens plaatsen op adressen die een veelvoud zijn van een getal dat per type vastligt (uitlijning, alignment), en de ongebruikte bytes die daarvoor tussen of na gegevenselementen worden ingevoegd (padding, opvulling). In een omgeving waarin int op een grens van 4 bytes wordt uitgelijnd, krijgt struct { char c; int i; char d; } 3 bytes na c en 3 bytes na d, voor een grootte van 12 bytes. Lezen of schrijven op een niet-uitgelijnd adres is op sommige CPU's trager en veroorzaakt op andere een exceptie. Door de members van het grootste naar het kleinste type te ordenen, wordt de padding kleiner.

Japanse benaming: アライメントとパディング

“Uitlijning en padding (alignment and padding)” komt voor in 2 oefenvragen uit 2 onderwerpen, bijv. Instructieset en assembly, Basis van programmeren in C.

Vakgebied: Basis van programmeren in C

Nu oefenen: vragen over Uitlijning en padding (alignment and padding)

Wat kan er gebeuren als het adres van een lw-instructie die 4 bytes leest in RISC-V geen veelvoud van 4 is (niet uitgelijnd)?

  1. ADe instructie wordt automatisch gelezen als het volgende veelvoud van 4 en leest altijd even snel en correct
  2. BAfhankelijk van de CPU-implementatie treedt een exception op, of wordt het in hardware of software afgehandeld en wordt het zeer traag
  3. CDe onderste 2 bits van het adres worden genegeerd en er is geen fout
Antwoord en toelichting tonen

Antwoord: B. Afhankelijk van de CPU-implementatie treedt een exception op, of wordt het in hardware of software afgehandeld en wordt het zeer traag

Als 4 bytes data op een adres dat een veelvoud van 4 is staan, kunnen ze met één geheugentoegang worden gelezen. Over een grens heen zijn twee toegangen nodig, dus RISC-V laat het aan de implementatie over of niet-uitgelijnde toegang in circuits wordt afgehandeld of dat een exception wordt veroorzaakt en software het overneemt. In het laatste geval is het ordes van grootte trager. Daarom voegt de compiler vulling (padding) tussen leden van een struct toe om uit te lijnen.

“Uitlijning en padding (alignment and padding)” in de toelichting

Vragen met “Uitlijning en padding (alignment and padding)” (2)

  1. Wat kan er gebeuren als het adres van een lw-instructie die 4 bytes leest in RISC-V geen veelvoud van 4 is (niet uitgelijnd)?
  2. Neem een gebruikelijke omgeving aan waarin char 1 byte en int 4 bytes is, en int op adressen wordt geplaatst die een veelvoud van 4 zijn. Wat is de uitvoer als de bovenstaande code wordt uitgevoerd?

Verwante termen

Struct (C-structuur) Array Bitveld (bit-field) Bufferoverloop (buffer overflow) Dangling pointer Dynamische geheugentoewijzing Functiepointer Geheugenlek (memory leak) Integerpromotie (integer promotion) Macro (#define)

Naar de woordenlijst