In the following link: http://msdn.microsoft.com/en-us/library/ms684122(VS.85).aspx, it is said that "Simple reads and writes to properly-aligned 32-bit variables are atomic operations". I'm wondering if in a c++ program all 32-bit variables are by default properly-aligned. Saying differently is there any case where a 32-bit variable could not been properly-aligned.
#pragma pack(1)
struct _not_aligned {
uint8_t a;
uint32_t b; // unaligned 32-bit
};
#pragma pack()
If you don't tell the compiler to do otherwise, then it will align 32-bit variables correctly.
You can write code which places 32-bit variables at non-aligned addresses (for example by creating an array of char
, and writing your int to an odd index in the array).
You can also use compiler #pragmas to tell the compiler not to align specific types or variables.
But if you don't do any of that, then your variables will be aligned properly.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With