C中自动和全局变量的初始化

时间:2011-06-13 07:31:40

标签: c variables initialization

如果我理解C中的全局变量(进入数据段)被初始化,其中自动变量(进入堆栈)不是。或者反过来呢?

为什么会这样?编译器没有初始化这两种变量的优点是什么?它会提高速度吗?

2 个答案:

答案 0 :(得分:4)

正如你所说,全局变量进入数据段,因此它们的值包含在最终的可执行文件中,它也可能是一个初始值,因为两种方式都没有性能差异。

另一方面,局部变量被分配到堆栈上,这是在运行时设置的,因此初始化它们会有性能损失。

答案 1 :(得分:1)

你理解正确,全局初始化,自动不是。这是因为全局变量直接从程序二进制映像加载,初始化是“免费的”,而auto是在堆栈上,代码需要运行来更改值并初始化它们(即:性能命中)。