【发布时间】:2022-02-03 00:43:52
【问题描述】:
例如,我有以下 for 循环:
for (int i = 0; i < 5; i++){
for (int j = 0; j < 5; j++){
int a = i + j;
}
}
每次迭代中i 的值存储在哪里?会自动存入缓存吗?
【问题讨论】:
-
你指的是什么缓存?根据处理器、编译器和选项,
i可能根本不存储在任何内存中,而可能只是在寄存器中。目前还不清楚您要问什么。事实上,整个代码块很可能会被完全优化,因为循环基本上什么都不做,因为a的生命周期只有一次迭代。 -
请注意,由于从未使用过
a,因此优化编译器可能会从已编译的程序中删除 i、j、a 和整个循环。 -
如下面的答案所述,编译器可以展开循环并将
i和j的硬编码值粘贴到a的每个计算中。但是由于 a 没有在任何地方使用,编译器可以只删除循环和计算并获得相同的结果 - 如果您想要完成计算,您需要使用a做一些事情。