对不起,如果以前有人问过这个问题,但我没有找到任何东西......
对于“普通”x86 架构:
当我在 C++ 中调用一个大函数时,是否会立即为所有堆栈变量分配内存?或者是否有编译器可以(并且确实)修改堆栈大小,即使函数没有完成。
例如,如果一个新范围开始:
int largeFunction(){
int a = 1;
int b = 2;
// .... long code ....
{ // new scope
int c = 5;
// .... code again ....
}
// .....
}
调用堆栈是否也可以在单独作用域的开头为变量 c “增长”并在其末尾“收缩”?还是当前的编译器总是会生成影响函数入口和返回值处的堆栈指针的代码?提前感谢您的回答。