Dela via


Kompilatorvarning (nivå 4) C4121

"symbol" : justeringen av en komponent var känslig för packning

Anmärkningar

Kompilatorn lade till utfyllnad för att justera en strukturmedlem på förpackningsgränsen, men förpackningsvärdet är mindre än medlemmens storlek.

Example

Följande kodfragment genererar till exempel C4121:

// C4121.cpp
// compile with: /W4 /c
#pragma pack(2)
struct s
{
   char a;
   int b; // C4121
   long long c;
};

Åtgärda problemet genom att göra någon av följande ändringar:

  • Ändra förpackningsstorleken till storleken på medlemmen som orsakade varningen eller större. I det här kodfragmentet ändrar du pack(2) till pack(4) eller pack(8).

  • Ändra ordning på medlemsdeklarationer efter storlek, från största till minsta. I kodfragmentet ändrar du ordningen på strukturmedlemmarna så att long long medlemmen föregår int, och int föregår char.

Den här varningen inträffar bara när kompilatorn lägger till utfyllnad före datamedlemmar. Det inträffar inte när data har placerats på en minnesplats som inte är korrekt anpassad för datatypen, men ingen utfyllnad har lagts till före datasegmentet. När data inte är justerade på gränser som är multiplar av datastorleken kan prestanda försämras. Läsningar och skrivningar av ojusterade data orsakar processorfel i vissa arkitekturer och felen kan ta två eller tre storleksordningar mer tid att lösa. Ojusterade dataåtkomster kan inte överföras till vissa RISC-arkitekturer.

Du kan använda #pragma pack eller /Zp för att ange strukturjusteringen. (Kompilatorn genererar inte den här varningen när /Zp1 har angetts.)