首页  >  文章  >  后端开发  >  C 和 C 中静态变量和全局变量的初始化过程是什么?

C 和 C 中静态变量和全局变量的初始化过程是什么?

DDD
DDD原创
2024-11-05 20:22:02978浏览

What is the Initialization Process for Static and Global Variables in C and C  ?

C 和 C 语言中静态变量和全局变量何时初始化?

在 C 和 C 语言中,静态变量和全局变量具有不同的初始化过程。与 C 不同,静态和全局对象在主函数之前进行构造,C 缺乏这样的初始化。

C 中的初始化时序

在 C 代码中,全局变量如global_int1 和 global_int2 没有显式初始化程序,由系统初始化为 0。但是,静态变量 static_int1 和 static_int2 未初始化。它们的值在程序中明确设置之前保持不确定。

C 中的初始化值

具有显式初始化器的变量(例如值为 5 的 global_int1)被分配其值由编译器作为代码翻译的一部分。该值存储在可执行文件的数据段中。

程序执行时,系统将可执行文件加载到内存中,包括数据段。然后为全局变量分配内存并使用数据段中存储的值进行初始化。

C 中的初始化阶段

C 遵循静态的三阶段初始化过程具有命名空间范围的对象:

  1. 零初始化: 所有静态对象初始设置为 0。
  2. 静态初始化: 具有静态的对象初始化(例如,static_int1)被分配它们的值。
  3. 动态初始化:具有动态初始化的对象(例如,如果在 C 中未初始化,则为 static_int2 或 global_int2 )在运行时通过代码执行进行初始化。

C 中的内存管理

C 中的静态初始化值存储在可执行文件的数据段中。与 C 类似,这些值在程序执行期间加载到内存中并分配给相应的变量。

没有初始化器或动态初始化的变量在 bss 段中分配内存。系统在程序执行前将这些变量初始化为0。

以上是C 和 C 中静态变量和全局变量的初始化过程是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn