Если ваш компилятор поддерживает TR1 (или C ++ 0x), вы можете использовать шаблон std::aligned_storage
.
Чтобы выделить пространство для объекта размером S
и выравниванием A
, вы можете выделить объект типа std::aligned_storage<S, A>::storage
.
(Пространство имен может варьироваться в зависимости от компилятора. Я думаю, что TR1 не определяет, в какое пространство имен должны быть помещены расширения. В MSVC используется пространство имен std::tr1
)
Кроме того, 32-разрядные целые числа уже 4-байтовые выровнены компилятором (по крайней мере, на платформах, где естественное выравнивание 32-разрядных чисел составляет 4 байта)