/* 0xFFFFFFFF * 256*/
#define test_256X0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, ... 0xFFFFFFFF
编译完成后,const数组放在" .rwdata"部分而不是" .rodata"部分,我不知道为什么。
谷歌搜索stackoverflow网站后,没有指定的答案。有没有人知道为什么或如何要求编译器(或链接器)在"将常数数据放入非只读部分时输出警告信息"?感谢。
PS。我通过添加 attribure 来解决我的问题(((" .rodata"))
__attribure__((section(".rodata"))) volatile const int TEST_ro[512] = {test_256X, test_256X};
PS。我使用linaor-gcc编译器来实现arm core
答案 0 :(得分:1)
答案: 如果我希望变量“易变”并放在只读部分,请使用
__attribure__((section(".rodata"))) /* default read-only data section*/
是最好的方式。
参考:
这不是什么挥发性的。它向编译器指示内存可能异步更改,因此它不使用缓存结果。它与const不一致。尝试使用static告诉编译器其他模块无法访问它。 - luser droog
如果要将变量放置到特定部分,则使用显式部分放置是可行的方法。 C标准为此提供了非常有限的工具集,因此您将受编译器提供的支配。 属性并不漂亮,但最有可能的是你需要做的事情。