编译器如何在堆栈上分配内存

时间:2015-06-30 11:22:11

标签: c++ c

如果我在函数中有很少的局部变量,比如 -

void fun()
{
  int a,b,c,d,e,f,g;
} 

编译器是否一个接一个地为每个变量分配内存?如是 为什么编译器不会立即读取所有变量然后为其分配内存 他们一次性?

1 个答案:

答案 0 :(得分:7)

编译器不会为其中任何一个分配内存。源代码和最终可执行文件之间的区别比这更复杂。简而言之,如果这些变量实际上最终存在于执行计算机上(这绝不是确定的:批量可以被优化掉!),它们的大小将只会达到堆栈帧的大小,这主要是& #34;构造"简单地说,无论何时输入/离开该范围,堆栈指针的递增距离。

从这个意义上讲,编译器"一次为他们分配内存"。但它基本上没有赢。 : - )