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

3
如果我理解正确,C语言中的全局变量(位于数据段)会被初始化,而自动变量(位于栈中)则不会。或者说是反过来?
为什么会这样呢?编译器不初始化这两种类型的变量有什么好处?它会增加速度等方面的优势吗?

作为参考,当前C草案标准(WG14/N1256)第6.7.8条款10涵盖了隐式初始化。 - outis
2个回答

4
正如你所说,全局变量存储在数据段中,因此它们的值包含在最终可执行文件中,无论是初始化的值还是未初始化的值都没有性能差异。
另一方面,局部变量分配到堆栈中,在运行时设置,因此初始化它们会影响性能。

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接