0
所以我使用的属性((对齐(X))的指令时,看到了一个有趣的编译器的行为。(我使用GCC)副作用
考虑下面的结构
typedef struct
{
char buffer[4096] __attribute__((aligned(4096));
int y;
} s1;
结构大小是4100个字节,看生成.MAP文件,我看到确实的结构对齐到4K地址,但与另外2不必要的副作用时,必须在4K对齐的地址, 效果:
在位于我的对齐结构之前的变量之间存在填充 - 因为它浪费了空间,我怎样才能让编译器尝试并用其他变量填充此空间?
不仅结构地址是对齐的,它也变成了大小对齐的形式,也就是说,它也在偏移量与4K对齐后开始变量(即8K被分配给4100字节结构),详见下文。
我的问题:如何使编译器尝试优化填充和地方变量存在(如变量,它后面)和如何防止编译器的结构尺寸对准其对齐的地址?
0x00012524 variable1
0x00012534 [padding]
0x00013000 my_struct (0x4100 bytes but consumes 8192)
0x00015000 variable3
感谢 维托
您告诉编译器对齐,然后您不想。 –
对于尾部填充,您无法做任何事情,这是预期的对齐对象。你可能希望得到的最好的结果是'variable3'被放置在你的'struct'之前......也许一个优化大小的选项(比如'-Os')会有所帮助。 –
1)与对齐的扩展无关 - 结构必须在偶数地址分配,就这么简单。 – Lundin