Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
'symbol' : wyrównanie elementu członkowskiego było wrażliwe na pakowanie
Uwagi
Kompilator dodał dopełnienie, aby wyrównać element członkowski struktury na granicy pakowania, ale wartość pakowania jest mniejsza niż rozmiar tego elementu.
Example
Na przykład poniższy fragment kodu powoduje C4121:
// C4121.cpp
// compile with: /W4 /c
#pragma pack(2)
struct s
{
char a;
int b; // C4121
long long c;
};
Aby rozwiązać ten problem, wprowadź jedną z następujących zmian:
Zmień rozmiar pakowania na rozmiar elementu członkowskiego, który spowodował ostrzeżenie, lub większy rozmiar. Na przykład w tym fragmencie kodu zmień wartość
pack(2)napack(4)lubpack(8).Zmień kolejność deklaracji elementów członkowskich według rozmiarów, od największych do najmniejszych. We fragmencie kodu należy odwrócić kolejność składowych struktury, tak aby
long longelement członkowski poprzedzałintelement , iintpoprzedza elementchar.
To ostrzeżenie występuje tylko, gdy kompilator dodaje dopełnienie przed elementami członkowskimi. Nie następuje, gdy pakowanie umieściło dane w lokalizacji w pamięci, która nie jest dostosowana dla tego typu danych, ale nie umieszczono dopełnienia przed elementem członkowskim. Gdy dane nie są wyrównane na granicach, które stanowią wielokrotność rozmiaru danych, sprawność działania może się zmniejszyć. Odczytywanie i zapisywanie niewyrównanych danych powoduje usterki procesora w niektórych architekturach, a znalezienie i usunięcie problemów może zająć czas dwa, a nawet trzy rzędy wielkości dłuższy niż normalnie. Dostępów do niewyrównanych danych nie można przenieść na niektóre architektury RISC.
Można użyć #pragma pack lub /Zp , aby określić wyrównanie struktury. (Kompilator nie generuje tego ostrzeżenia, gdy /Zp1 jest określony).