gpt4 book ai didi

c - 使用 __attribute__((aligned(X)) 的副作用

转载 作者:行者123 更新时间:2023-11-30 16:42:46 25 4
gpt4 key购买 nike

因此,在使用属性((aligned(x))指令时,我看到了有趣的编译器行为。(我正在使用GCC)

考虑以下结构

typedef struct 
{
char buffer[4096] __attribute__((aligned(4096));
int y;
} s1;

结构体大小为4100字节,并且必须是4K对齐地址,当查看生成的 .map 文件时,我发现该结构确实与 4k 地址对齐,但有另外 2 个不需要的副作用:

  1. 位于对齐结构之前的变量之间有一个填充 - 因为这是浪费空间,我怎样才能让编译器尝试用其他变量填充这个空间?

  2. 不仅结构地址对齐,它也变成大小对齐,即变量开始后的偏移量也对齐到 4K(即为 4100 字节的结构分配 8K),更多详细信息请参见下文。

我的问题:我如何让编译器尝试优化填充并将变量放置在那里(例如后面的​​变量)以及如何防止编译器将结构大小与其对齐方式对齐地址?

0x00012524      variable1 
0x00012534 [padding]
0x00013000 my_struct (0x4100 bytes but consumes 8192)
0x00015000 variable3

谢谢维托

最佳答案

除了在链接器脚本中声明一个附加段并将变量放在那里之外,我没有看到任何其他方法。将此段放在 .bss 和 .data 段之后,您就完成了:)

关于c - 使用 __attribute__((aligned(X)) 的副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45715606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com