这是一个非常简单的问题:
在运行时,对全局和静态变量进行0初始化是否会有任何性能损失(尽管非常小)?
您可以通过以下示例进行测试:
#include <stdio.h>
static int uninit;
static int init_zero=0;
static int init_one=1;
int main (void)
{
printf("%p\n", &uninit);
printf("%p\n", &init_zero);
printf("%p\n", &init_one);
return 0;
}
在这个例子中,变量uninit
和init_zero
将会在相邻的内存地址结束(很可能离彼此4个字节远),因为它们都在.bss
段中。但是,变量init_one
将会被分配到另一个位置,因为它被分配在.data
段中。.bss
段中没有任何内容。因此,在某些架构中可能会在运行时执行零初始化 - 这是正确的吗? - Rostislav从0初始化的问题(它只是默认初始化的一个子集)扩展到默认初始化,我们仍然可以得出结论,它通常对应用程序性能没有可衡量的影响。然而,很容易设计一个类,在其构造函数中执行数据库查找,从而在应用程序启动期间产生有趣的效果。
.DATA
块中,并且在代码生成时将其清零。据我所知,答案是否定的。实际上,我认为这就是具有静态存储期的变量为什么进行零初始化的历史原因 - 因为它没有任何惩罚。 - Rostislav.data
(非零初始化变量)和.bss
(零初始化变量)的区别。通常这两个段是紧密相连的,它们被分配在一起,形成了 RAM 的“本地数据”部分。 - Lundin