除了内容(例如类型,位置)之外,变量是否消耗内存?

fun*_*ute 4 c c++

很可能之前已经被问过/回答过,但不确定如何最好地说出来,一个以前回答的问题的链接会很棒.

如果你定义类似的东西

char myChar = 'a';

据我所知,这将占用内存中的一个字节(取决于实现并假设没有unicode等等,实际数字并不重要).

但我认为编译器/计算机还需要保留一个变量类型表,地址(即指针),甚至更多.否则它将保留内存,但无法对其执行任何操作.所以每个变量已经消耗了至少几个字节的内存.

这是对正在发生的事情的正确描述,还是我误解了程序编译/执行时会发生什么?如果以上是正确的,那么更多的是与编译或执行有关吗?

Jos*_*eld 12

编译器将跟踪变量的性质-它的名字,寿命,类型,范围等,这些信息将只在编译期间存在于内存中.然而,一旦编译了程序并执行了程序,剩下的就是对象本身.在运行时没有类型信息(除非你使用RTTI,否则会有一些,但只是因为你需要它来让你的程序运行 - 例如dynamic_casting 所需).

在访问该对象的代码中发生的所有事情都被编译成一个将其完全视为单个字节的形式(因为它是a char).无论如何,对象所在的地址只能在运行时知道.但是,具有自动存储持续时间的变量(如局部变量)通常仅位于距当前堆栈帧的某个固定偏移处.该偏移量很难烘焙到可执行文件中.