Есть ли какой-либо переносной способ определения того, что максимально возможное выравнивание для любого типа?
Например, для x86 для инструкций SSE требуется 16-байтовое выравнивание, но, насколько мне известно, инструкции не требуют большего, поэтому любой тип можно безопасно хранить в буфере с выравниванием по 16 байт.
Мне нужно создать буфер (например, массив char), где я могу писать объекты произвольных типов, поэтому мне нужно иметь возможность полагаться на начало выравниваемого буфера.
Если все остальное не удается, я знаю, что при назначении массива char с new
гарантировано максимальное выравнивание, но с шаблонами TR1/С++ 0x alignment_of
и aligned_storage
, мне интересно, было бы возможно создать буфер на месте в моем классе буфера, вместо того, чтобы требовать дополнительной указательной ссылки на динамически выделенный массив.
Идеи?
Я понимаю, что существует множество опций для определения максимального выравнивания для ограниченного набора типов: объединение или просто alignment_of
из TR1, но моя проблема заключается в том, что набор типов неограничен. Я заранее не знаю, какие объекты должны храниться в буфере.