c - ARM: GNU GCC LInker bss 部分对齐

标签 c gcc linker arm

我正在使用 GNU 链接器脚本,其中 bss 部分变量获得非 4 字节对齐地址,这是一个大问题,因为硬件正在使用变量地址,需要字对齐地址.

与其使用其中一个的对齐属性,不如让我有 10 个变量,或者我想让链接器为特定部分中的每个变量生成字对齐地址,我该怎么做?

我试过使用 ALIGN() 但没有效果。

这是例子:

 .bss.a 9cdf8        0x1

 .bss.b 9cdf9        0x1

对于 .bss.b,我想获取 0x9cdf8 + 4 等所有变量。

我怎样才能做到这一点?

最佳答案

您最好在定义的地方标记需要 4 字节对齐的变量。例如,在 gcc 中:

char a __attribute__((aligned(4)));
char b __attribute__((aligned(4)));

参见 http://gcc.gnu.org/onlinedocs/gcc-4.8.2/gcc/Variable-Attributes.html

关于c - ARM: GNU GCC LInker bss 部分对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19666181/

相关文章:

c - c 中的线程,我在这里缺少什么?

c++ - 结构 tbb 与 atomic_ops 的内存对齐

linux - 为 linux 3.2.x 与基于 2.6.x 的系统编译的代码之间存在巨大的时间差异

c - 相同的代码 (C) 无法在终端上运行,但可以在 IDE 上运行

c++ - 为什么模板没有重新定义,为什么都写在头文件里了?

c - 使用系统函数运行另一个.cpp文件

c - 使用套接字发送文件

c - 使用 C 提取 Wiki 链接

c++ - 使用自动工具和替代工具的优势

c++ - 如何从同样具有 'main' 的 .cpp 源文件中链接函数?