Strukturutfyllnad är tillägget av extra byte till en datastruktur för att säkerställa att den uppfyller vissa anpassningskrav. Detta görs för att förbättra prestandan för vissa operationer, såsom minnesåtkomst och flyttalsberäkningar.
Inriktningen av en datastruktur hänvisar till positionen för dess medlemmar i minnet. Vissa processorer kräver att data justeras på vissa gränser, till exempel 4-byte eller 8-byte gränser. Om en datastruktur inte är korrekt justerad kan processorn behöva utföra extra arbete för att komma åt sina medlemmar, vilket kan bromsa prestandan.
Strukturutfyllnad kan användas för att säkerställa att en datastruktur uppfyller målprocessorns inriktningskrav. Tänk till exempel på följande struktur:
```
struct Point {
int x;
int y;
};
```
På en 32-bitars processor är denna struktur 8 byte lång, där "x"-medlemmen börjar vid minnesadress 0 och 'y'-medlemmen börjar vid minnesadress 4. Men om processorn kräver 4-byte-justering, y`-medlemmen skulle faktiskt börja på minnesadress 8, vilket lämnar ett 4-byte gap mellan de två medlemmarna. Denna lucka kallas utfyllnad .
Strukturutfyllnad kan också användas för att förbättra prestandan för flyttalsberäkningar. Vissa processorer använder speciella instruktioner för flyttalsoperationer som kräver att operanderna justeras på vissa gränser. Genom att lägga till utfyllnad i en datastruktur kan du se till att dess flyttalsmedlemmar är korrekt justerade, vilket kan förbättra prestandan för flyttalsberäkningar.
Mängden utfyllnad som krävs för en datastruktur beror på målprocessorn och inriktningskraven för dess medlemmar. Vissa kompilatorer tillhandahåller alternativ för att automatiskt lägga till utfyllnad till strukturer, eller så kan du lägga till utfyllnad manuellt genom att infoga tomma medlemmar i strukturen.