我一直相信 GCC 会在 ELF 或此类文件的段(或用于优化的段)中放置一个static const
变量。但似乎并非如此。.rodata
.text
我目前正在gcc (GCC) 4.7.0 20120505 (prerelease)
一台装有 GNU/Linux 的笔记本电脑上使用。它确实放置了一个静态常量变量来.bss
分段:
/*
* this is a.c, and in its generated asm file a.s, the following line gives:
* .comm a,4,4
* which would place variable a in .bss but not .rodata(or .text)
*/
static const int a;
int main()
{
int *p = (int*)&a;
*p = 0; /* since a is in .data, write access to that region */
/* won't trigger an exception */
return 0;
}
那么,这是一个错误还是一个功能?我决定将此作为 bug 提交给 bugzilla,但最好先寻求帮助。
GCC 是否有任何原因不能将 const 变量放入.rodata
?
更新:
经测试, GCCconst int a = 0;
将放入一个具有显式初始化(如 )的常量变量,而我未初始化该变量。.rodata
因此,这个问题可能会在以后关闭——我可能没有提出正确的问题。
另外,在我之前的话中,我写道变量 a 放在“.data”部分,这是不正确的。.bss
由于未初始化,它实际上已放入部分中。上面的文字现在已更正。