Бывают ли случаи, когда 32-битная переменная не может быть правильно выровнена

По следующей ссылке: http://msdn.microsoft.com/en-us/library/ms684122%28VS.85%29.aspx сказано, что «Простые операции чтения и записи в правильно выровненные 32-битные переменные являются атомарными операциями». Мне интересно, все ли 32-битные переменные в программе на С++ по умолчанию правильно выровнены. Другими словами, есть ли случай, когда 32-битная переменная не может быть правильно выровнена.


person Guillaume07    schedule 26.02.2014    source источник


Ответы (1)


Если вы не скажете компилятору поступить иначе, он правильно выровняет 32-битные переменные.

Вы можете написать код, который размещает 32-битные переменные по невыровненным адресам (например, создав массив char и записав значение int в нечетный индекс массива).

Вы также можете использовать #pragmas компилятора, чтобы указать компилятору не выравнивать определенные типы или переменные.

Но если вы ничего из этого не сделаете, ваши переменные будут правильно выровнены.

person jalf    schedule 26.02.2014