我正在读一本提到这一点的书
如果编译器知道const的每次使用,则不需要分配空间来保存它.例如:
const int c1=1;const int c3=my_f(3);extern const int c4;鉴于c3和c4的值不称为编译时,必须为c3和c4分配存储.
我不明白这一点.我的怀疑是:
抱在这里意味着什么?难道它还不需要将所有内容存储在内存中吗?对于c1,我们不会有任何存储分配?
请清除我的疑虑.
谢谢.
c1与其他两个常量的不同之处在于它是用文字值初始化的。这使得编译器可以在使用常量的任何地方放置该值,如下所示:
int x = z + c1;
Run Code Online (Sandbox Code Playgroud)
可以替换为
int x = z + 1;
Run Code Online (Sandbox Code Playgroud)
这意味着编译器不需要分配空间并1在其中存储。
c3和c4是不同的:一个是使用函数计算的,另一个是由不同的编译单元提供的。这意味着编译器无法再像 那样执行替换:编译器不知道和c1的值。因此编译器生成代码c3c4
int x = z + c4;
Run Code Online (Sandbox Code Playgroud)
就像c4变量存储在内存中的某个位置一样。由于本例中c4是外部常量,因此链接器将解析其位置,并填写编译器缺少的信息(即 的地址c4)以使程序完整并准备运行。
| 归档时间: |
|
| 查看次数: |
2767 次 |
| 最近记录: |