在C语言中,常量变量存储在哪里?

61

我想知道常量变量存储在哪里。它是存储在与全局变量相同的内存区域吗?还是在栈上?


2
我想知道这是哪种语法... - DevSolar
1
这个问题没有意义,请重新表述。 - nall
3
试图重新表达这个问题。我希望我正确理解了原帖作者的意图。 - DevSolar
14个回答

0

我在x86_64 GNU/Linux系统上进行了检查。通过取消引用指向“const”变量的指针,可以更改该值。我使用了objdump。在文本段中没有找到“const”变量。“const”变量存储在堆栈上。 “const”是“C”中的编译器指令。当编译器遇到更改“const”变量的语句时,会抛出错误。


0
作为一个补充,正如您所知,在链接过程中决定了最终可执行文件的内存布局。还有一个称为COMMON的部分,其中来自不同输入文件的公共符号被放置。这个公共部分实际上属于.bss部分。

0

全局变量和常量是两个完全分离的关键字。您可以有其中之一、两者都没有或同时拥有。

您的变量在内存中存储的位置取决于配置。稍微了解一下堆和栈,这将使您能够提出更多(并且如果我可以的话,更好、更具体)的问题。

请参考,以获取更多相关知识。


0

有些常量甚至不会被存储。

考虑以下代码:

int x = foo();
x *= 2;

编译器很可能会将乘法转换为x = x + x;,因为这样可以减少从内存加载数字2的需求。


...或者转换成常数乘法,其中2将存储在实际CPU指令中。 - Isak Savo
一些常量甚至不应该是“arfen't”,而应该是“aren't”(我本来想编辑它,但由于某种原因我不能进行少于6个字符的更改 :/)。 - Rptk99

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接