5 Stimmen

Gibt es Fälle, in denen eine 32-Bit-Variable nicht ordnungsgemäß ausgerichtet werden konnte?

In folgendem Link: http://msdn.microsoft.com/en-us/library/ms684122(VS.85).aspx wird gesagt, dass "Einfache Lese- und Schreibzugriffe auf korrekt ausgerichtete 32-Bit-Variablen atomare Operationen sind". Ich frage mich, ob in einem C++-Programm alle 32-Bit-Variablen standardmäßig korrekt ausgerichtet sind. Anders ausgedrückt, gibt es einen Fall, in dem eine 32-Bit-Variable nicht korrekt ausgerichtet sein könnte.

3voto

Jason Coco Punkte 77369
#pragma pack(1)
struct _not_aligned {
  uint8_t a;
  uint32_t b; // nicht ausgerichtetes 32-Bit
};
#pragma pack()

1voto

jalf Punkte 235501

Wenn Sie dem Compiler nicht sagen, er solle etwas anderes tun, wird er 32-Bit-Variablen richtig ausrichten.

Sie können Code schreiben, der 32-Bit-Variablen an nicht ausgerichteten Adressen platziert (zum Beispiel durch Erstellen eines Arrays von char und Schreiben Ihrer int an einem ungeraden Index im Array).

Sie können auch Compiler-#pragmas verwenden, um dem Compiler zu sagen, bestimmte Typen oder Variablen nicht auszurichten.

Aber wenn Sie das nicht tun, werden Ihre Variablen ordnungsgemäß ausgerichtet sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X