【发布时间】:2021-10-17 11:46:12
【问题描述】:
在下面给出的代码中,我没有声明任何变量,这意味着我使用了 0 个字节,或者在 ROM 中声明了常量,就像字符串文字一样。
#include <stdio.h>
//Compiler version gcc 6.3.0
int main()
{
printf("%d",2*5);
return 0;
}
【问题讨论】:
-
常量所在的位置完全由实现定义。有时它们是立即指令,有时它们在可执行文件的数据段中,有时它们被划入石碑。 C 本身并没有说明它,除了生成的程序必须如何表现。
-
它们是否占用内存?
-
你可以使用 godbolt.org 看看它在那个网站上做了什么,我把你的代码放在那里,它产生了这个
mov esi, 10,这是一个关于 esi 寄存器的答案stackoverflow.com/questions/1856320/… -
当然,它们需要记忆——它们不是凭空出现的。不过,乘法可能由编译器完成,而不是在运行时完成,
10将存储在某个地方。 -
我明白了,谢谢大家