c – 全局变量0初始化罚分

这是一个非常简单的问题:

0初始化全局变量和静态变量在运行时是否具有任何性能损失(尽管非常小)?

解决方法

不,由于C(和C)标准表示所有未被程序员初始化的全局/静态变量必须初始化为零.这些变量被放置在一个名为.bss的特殊段中.在调用main()之前,它们被初始化为零.

如果你明确地初始化你的全局/静态,而是初始化你的全局/静态,但是值为0,那么编译器就足够聪明才能实现这一点,并且仍然放在bss段中.

您可以通过以下示例为您自己测试:

#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段中.

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...