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

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

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

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

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

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