在C++中,静态全局变量在程序的生命周期内只分配一次内存。它们的内存分配机制如下:
-
在程序开始执行之前,编译器会处理静态全局变量的初始化。这意味着在
main()
函数执行之前,编译器会分配内存并为静态全局变量分配初始值。这些初始化操作按照它们在源代码中出现的顺序进行。 -
静态全局变量的内存分配在程序的数据段(data segment)中进行。数据段是一个特殊的内存区域,用于存储全局变量和静态变量。当程序启动时,操作系统会将数据段映射到进程的地址空间。
-
由于静态全局变量在整个程序生命周期内只分配一次内存,因此它们在程序的多个实例之间共享。这意味着如果两个不同的源文件包含同名的静态全局变量,它们实际上是同一个变量,共享相同的内存地址。
-
静态全局变量的生命周期与程序的生命周期相同。当程序结束时,操作系统会回收数据段的内存,包括静态全局变量所占用的内存。
需要注意的是,静态全局变量的初始化顺序与它们在源代码中声明的顺序相同。如果初始化依赖于其他静态全局变量,那么它们的初始化顺序可能会受到影响。为了避免这种情况,可以使用函数内的局部静态变量(例如static int x;
),它们在第一次调用函数时初始化,并在程序的生命周期内保持唯一性。