1
/* 0xFFFFFFFF * 256*/
#define test_256X0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, ... 0xFFFFFFFF

编译后,const数组放在“.rwdata”部分而不是“.rodata”部分,我不知道为什么。

在谷歌和搜索stackoverflow站点之后,没有指定答案。有谁知道“将常量数据放入非只读部分”时为什么或如何要求编译器(或链接器)输出警告消息?谢谢。

PS。我通过添加属性((section(".rodata")))解决了我的问题

__attribure__((section(".rodata"))) volatile const int TEST_ro[512] = {test_256X, test_256X};

PS。我将 linaor-gcc 编译器用于 arm 核心

4

1 回答 1

1

答案:如果我希望变量是“易失性”并放在只读部分,请使用

__attribute__((section(".rodata"))) /* default read-only data section*/

是最好的方法。

参考:

  1. 这不是 volatile 的用途。它向编译器指示内存可能会异步更改,因此它不使用缓存的结果。它与 const 不一致。尝试 static 告诉编译器其他模块无法访问它。– luser droog

  2. 如果要将变量放置到特定的部分,那么使用显式的部分放置是要走的路。C 标准为此提供了非常有限的工具集,因此您受编译器提供的东西的支配。属性并不漂亮,但这很可能是您需要做的。

于 2014-11-07T12:16:55.833 回答