在c ++的开头括号中的存储分配?

use*_*338 1 c++

在阅读BRUCE ECKEL的C++思考时,我发现了以下文字

在c ++中,变量可以在作用域中的任何位置定义,因此可能看起来变量的存储在定义之前可能无法定义.实际上,编译器在分配所有存储时更可能遵循c对于范围的开头括号范围.

怀疑:我猜它只适用于堆栈中的存储分配但我怀疑的是编译器如何知道在到达其定义以便分配之前在main(或其他fn)中定义了多少个对象(或者甚至不是一个对象)存放在范围的开口支撑处.

bdo*_*lan 5

编译器可以在实际发出任何代码之前分析整个函数.通常,编译器将为每个支撑段计算出需要多少存储空间,并在函数序言中添加单个汇编指令以将堆栈指针调整多个字节.

然而,实际上,初始化变量发生在代码中的适当位置.