С++ __attribute__ выровненное значение

Возможный дубликат:
GCC __attribute__((aligned(x)) объяснение
Что означает '_attribute_((aligned(4)));' в первой строке?

Что означают эти две части кода? В частности, части __attribute__ ((aligned(..))).

struct my_struct {
  int64_t a;
  int64_t b;
} __attribute__ ((aligned(16)));

и

struct my_struct2 { double arr[4] __attribute__((aligned(64))); };

person JJ Beck    schedule 30.10.2012    source источник


Ответы (1)


Регистры процессора часто указывают на память.

Когда вы увеличиваете регистр, он указывает на 64 бита дальше на 64-битной машине. Однако, если вы хотите добраться до байта внутри этого раздела, компилятору придется проделать дополнительную работу.

Если вы выравниваете память по «краям» памяти, регистры могут обращаться к ним намного быстрее. Это также означает, что элементы структуры дополняются, поэтому некоторое пространство тратится впустую. Если вы делаете дамп памяти структуры, вы можете быть удивлены заполнением.

person Steve Wellens    schedule 30.10.2012
comment
В macOS компилятор выравнивает любой массив до 16 байт. Делает ли GCC это также в 64-битной системе? - person Royi; 05.08.2017
comment
1) понятия не имею. 2) Если у вас есть новый вопрос, вы должны начать новый вопрос, а не отмечать. 3) Некропостинг (публикация в очень старых темах) осуждается. - person Steve Wellens; 05.08.2017