2

可能重复:
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))); };
4

1 回答 1

3

CPU 寄存器通常指向内存。

当您增加一个寄存器时,它会在 64 位机器上进一步指向 64 位。但是,如果您想获取该部分中的一个字节,编译器必须做更多的工作。

如果您在内存的“边缘”上对齐内存,寄存器可以更快地访问它们。这也意味着结构成员被填充,因此浪费了一些空间。如果您对结构进行内存转储,您可能会对填充感到惊讶。

于 2012-10-30T02:42:08.443 回答