Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
'symbol': Ausrichtung eines Elements hängt vom Pragma 'pack' ab
Bemerkungen
Der Compiler hat eine Auffüllung hinzugefügt, um einen Strukturmember an der Ausrichtungsgrenze auszurichten, aber der Paketwert ist geringer als die Größe des Members.
Example
Beispielsweise wird durch folgenden Codeausschnitt C4121 erstellt:
// C4121.cpp
// compile with: /W4 /c
#pragma pack(2)
struct s
{
char a;
int b; // C4121
long long c;
};
Nehmen Sie zur Behebung dieses Problems eine der folgenden Änderungen vor:
Ändern Sie die Paketgröße mindestens auf die Größe des Members, der die Warnung verursacht hat. Ändern Sie beispielsweise in diesem Ausschnitt
pack(2)inpack(4)oderpack(8).Ordnen Sie die Memberdeklarationen aufsteigend nach Größe neu an. Kehren Sie im Codeausschnitt die Reihenfolge der Strukturmember um, sodass der Member
long longvorintund der Memberintvorcharplatziert ist.
Diese Warnung tritt nur auf, wenn der Compiler den Datenmembern eine Auffüllung voranstellt. Sie tritt nicht auf, wenn beim Packen Daten an einer Speicheradresse platziert werden, die für den Datentyp nicht ausgerichtet ist, aber dem Datenmember keine Auffüllung vorangestellt wurde. Daten, die nicht an Grenzen ausgerichtet sind, bei denen es sich um ein Vielfaches der Datengröße handelt, können die Leistung mindern. Lese- und Schreibvorgänge von nicht ausgerichteten Daten führen in manchen Architekturen zu Prozessorfehlern; die Behebung dieser Fehler nimmt zwei- bis dreimal mehr Zeit in Anspruch. Zugriffe auf nicht ausgerichtete Daten können zu einigen RISC-Architekturen nicht portiert werden.
Sie können #pragma Pack oder /Zp verwenden, um die Strukturausrichtung anzugeben. (Der Compiler generiert diese Warnung nicht, wenn /Zp1 angegeben wird.)