c++ - C(++) 对未存储在变量中的值有什么作用?

标签 c++ c memory compilation

我有点好奇 C 和 C++ 如何处理未存储在变量中的数据,例如:

int IE6_Bugs = 12345;
int Win_Bugs = 56789;

是的 - 一切都清楚了。 IE6_Bugs 有 123456 存储在它的特定内存地址。

然后呢..

if ( IE6_Bugs + Win_Bugs > 10000 )
{
  // ...

所以 C 抓取两个变量的值并将它们相加,以便将结果与右侧的 int 进行比较。

但是:

  • IE6_Bugs+Win_Bugs 是否曾经到达 RAM?还是处理器直接通过自己的缓存比较值?

  • 或者,在编译过程中,上面的 if 语句是否转换为机器更“易于理解”的东西? (也许先计算 IE6_Bugs+Win_Bugs 并将其存储在某个变量中,...)

最佳答案

它将被放置在 CPU 中的一个寄存器中(假设有一个可用)。寄存器是一种内置于 CPU 本身的超快速超小型 RAM,用于存储中间操作的结果。

如果可以确定该值始终等于 xxx,则智能编译器将替换 xxx 的值。

请记住,无论是表达式还是数字,(x+y vs 10)它仍然需要放在一个寄存器中,以便CPU可以访问它并根据其值执行操作。

如需更多信息,请阅读计算机架构。

关于c++ - C(++) 对未存储在变量中的值有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2168054/

相关文章:

c++ - 掷硬币游戏 : Optimization problem

c++ - c++中const数组的平均值模板

c++ - 自定义 STL 容器包装器报告奇怪的编译器错误

c - 关于一小段 C 代码的争论

c++ - 调用成员 C++ 函数但 C 函数具有相同的名称

go - 在 golang 中使用互斥量管理 slice 以提高性能

javascript - 需要部分 JavaScript 文件的内存使用情况

c++ - 外部模板 : declaration does not declare anything

C 声明 char* 数组

c - 添加 printf 会增加数据段的大小