Какова структура упаковки по умолчанию с использованием cl/gcc/clang?
В msdn для опции компилятора cl /Zp упоминается, что "упаковывает структуры на 8-байтовых границах (по умолчанию)". Означает ли это, что если существует тип данных размером> 8 байт, по умолчанию (без параметра компилятора или пакета прагмы) он не будет естественным образом выровнен и скорее будет иметь 8-байтовое выравнивание. Если да, то это случай с GCC/ Clang?
Я проверил на GCC, используя -fpack-struct
а также __uint128_t
, что у него нет такого дефолта. Например sizeof(tStruct)
32 и 24:
struct tStruct {
uint64_t a;
__uint128_t b;
};
Я не могу проверить то же самое на окнах, поскольку он не обеспечивает какой-либо тип данных> 8 байт.