2014-02-26 5 views
5

In der folgenden Verknüpfung: http://msdn.microsoft.com/en-us/library/ms684122(VS.85).aspx, heißt es, dass "Einfache Lese- und Schreibvorgänge in ordnungsgemäß ausgerichteten 32-Bit-Variablen atomare Operationen sind". Ich frage mich, ob in einem C++ Programm alle 32-Bit Variablen standardmäßig richtig ausgerichtet sind. Anders gesagt gibt es einen Fall, in dem eine 32-Bit-Variable nicht richtig ausgerichtet werden konnte.Gibt es Fälle, in denen eine 32-Bit-Variable nicht richtig ausgerichtet werden konnte

Antwort

1

Wenn Sie dem Compiler nichts anderes mitteilen, richtet er die 32-Bit-Variablen korrekt aus.

Sie können Schreibcode, der bei nicht-ausgerichteten Adressen 32-Bit-Variablen Orte (beispielsweise durch eine Anordnung von char Erstellen und Ihre int eines ungeraden Index in dem Array zu schreiben).

Sie können den Compiler #pragmas auch verwenden, um dem Compiler nicht mitzuteilen, um bestimmte Typen oder Variablen auszurichten.

Aber wenn Sie nichts davon tun, dann werden Ihre Variablen richtig ausgerichtet sein.

3
#pragma pack(1) 
struct _not_aligned { 
    uint8_t a; 
    uint32_t b; // unaligned 32-bit 
}; 
#pragma pack() 
Verwandte Themen