如果我在函数中有很少的局部变量,比如 -
void fun()
{
int a,b,c,d,e,f,g;
}
编译器是否一个接一个地为每个变量分配内存?如是 为什么编译器不会立即读取所有变量然后为其分配内存 他们一次性?
答案 0 :(得分:7)
编译器不会为其中任何一个分配内存。源代码和最终可执行文件之间的区别比这更复杂。简而言之,如果这些变量实际上最终存在于执行计算机上(这绝不是确定的:批量可以被优化掉!),它们的大小将只会达到堆栈帧的大小,这主要是& #34;构造"简单地说,无论何时输入/离开该范围,堆栈指针的递增距离。
从这个意义上讲,编译器将"一次为他们分配内存"。但它基本上没有赢。 : - )