我正在读一本书,其中提到了这一点
我什么都不懂。我的怀疑是:
在这里举行意味着什么?它是否还需要将所有内容存储在内存中?
对于c1,我们不会有任何存储分配吗?
请清除我的疑虑。
谢谢你。
最佳答案
c1
与其他两个常量的不同之处在于,它使用文字值进行初始化。这使编译器可以将该值放置在使用该常量的任何地方,如下所示:
int x = z + c1;
可以替换为
int x = z + 1;
这意味着编译器不需要分配空间并在其中存储
1
。c3
和c4
不同:一种是使用函数计算的,另一种是通过不同的编译单元提供的。这意味着编译器不再能够像使用c1
一样执行替换:c3
和c4
的值对于编译器是未知的。因此,编译器生成用于int x = z + c4;
就像
c4
是存储在内存中某个位置的变量一样。由于在这种情况下c4
是一个外部常量,因此链接程序将解析其位置,并填写编译器缺少的信息(即c4
的地址)以使程序完整并可以运行。