В 'C' вы бы использовали объединение для принудительного выравнивания, если вы не хотите полагаться на параметры или директивы компилятора:
#include <stdint.h>
typedef union _foo
{
uint64_t align;
double d;
} foo
Это гарантирует, что ваши двойники выровнены по 64-битным кодам, а просто делает доступ к ним более утомительным.
В качестве альтернативы, если вы не возражаете, полагаясь на компилятор, gcc поддерживает директиву #pragma pack(64)
, которая обеспечивает 64-битное выравнивание для всего.