Существуют ли какие-либо гарантии относительно упаковки структур в C?
Например, при условии, что sizeof(double) == 8
, гарантируется ли sizeof(struct { double x, y; }) == 16
?
Я знаю, что намерение, стоящее за этим вопросом, противоречит строгим правилам псевдонимов, поэтому предположим, что строгое псевдонимы отключены, например. в случае gcc с -fno-strict-aliasing
.
Чтобы избежать дальнейших спекуляций: намерение состоит в том, чтобы знать о совместимости структуры с ее явно упакованным аналогом. Обратите внимание, что псевдонимы имеют значение даже в следующем случае: Гарантировано ли, что C-структуры с одинаковыми типами элементов имеют одинаковую компоновку в памяти? а>. Не нужно беспокоиться о том, что я хочу получить доступ к отдельным байтам.
sizeof(struct { double x[2]; }) == 2 * sizeof(double)
должно сохраняться. - person mch   schedule 06.12.2017char *
, например, может быть больше, чемstruct {char} *
, и в этом случае структура может потребовать выравнивания больше, чем_Alignof(char)
. - person EOF   schedule 06.12.2017