我正在读一本书,其中提到了这一点



我什么都不懂。我的怀疑是:

在这里举行意味着什么?它是否还需要将所有内容存储在内存中?
对于c1,我们不会有任何存储分配吗?

请清除我的疑虑。

谢谢你。

最佳答案

c1与其他两个常量的不同之处在于,它使用文字值进行初始化。这使编译器可以将该值放置在使用该常量的任何地方,如下所示:

int x = z + c1;

可以替换为
int x = z + 1;

这意味着编译器不需要分配空间并在其中存储1
c3c4不同:一种是使用函数计算的,另一种是通过不同的编译单元提供的。这意味着编译器不再能够像使用c1一样执行替换:c3c4的值对于编译器是未知的。因此,编译器生成用于
int x = z + c4;

就像c4是存储在内存中某个位置的变量一样。由于在这种情况下c4是一个外部常量,因此链接程序将解析其位置,并填写编译器缺少的信息(即c4的地址)以使程序完整并可以运行。

10-08 09:32