Guillaume Paris
Guillaume Paris

Reputation: 10539

Is there cases where a 32-bit variable could not been properly-aligned

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.

Upvotes: 5

Views: 260

Answers (2)

Jason Coco
Jason Coco

Reputation: 78353

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

Upvotes: 3

Stack Overflow is garbage
Stack Overflow is garbage

Reputation: 247929

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.

Upvotes: 1

Related Questions