c++ - 为什么书上说 “the compiler allocates space for variables in memory” ?

标签 c++ compiler-construction runtime sizeof

为什么书上说“编译器为内存中的变量分配空间”。不是可执行文件吗?我的意思是,例如,如果我编写以下程序,

#include <iostream>
using namespace std;

int main()
{
   int foo = 0;
   cout<<foo;
   return 0;
}

并编译它,得到一个可执行文件(让它成为program.exe),现在,如果我运行program.exe,这个可执行文件将自己命令为变量foo分配一些空间。不会吗?请解释为什么书籍一直说,“编译器会做这个......做那个”,而实际上,编译的可执行文件会这样做。

在这个问题上添加另一个相关问题,为什么 sizeof 称为编译时运算符?它实际上不是一个运行时运算符吗?

最佳答案

当我们聘请建筑师设计房屋时,他或她会定义房间的大小等,并告知 worker (劳工)。 worker 们相应地进行工作。但我们仍然会说“建筑师以这种方式 build 房屋”而不是 worker 以这种方式 build 房屋”。

worker 只是在执行建筑师定义的步骤。编译器实际上会在运行时检查和定义要分配多少内存等等,然后这些指令就会被执行。

关于c++ - 为什么书上说 “the compiler allocates space for variables in memory” ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15805953/

相关文章:

C++ 宏 : order of precedence difference?

c++ - 在 C++ 中拆分和合并 std::list

c++ - Visual C++ - 运行时检查失败 #3 - 变量未初始化

Java使用运行时获取的类型参数创建泛型实例

c++ - 混合 C++ 标准字符串和 Windows API

c++ - 如何在类构造函数中使用 C++11 随机引擎和均匀分布?

compiler-construction - 虚拟机垃圾收集

iphone - 更新到 iPhone SDK 4.0 后,自己的库出现链接器错误(仅限模拟器)

c - 在运行时重定位函数 - gcc

java - Intellij IDEA + JBoss 在运行时编译时不更新 LESS 文件