c++ 内存管理与static关键字


   c/c++程序的内存空间,即一整个程序从开始到最终结束所使用的空间的分区如下图所示[1]

   静态变量与全局变量存储在静态(全局)区内,一旦初始化,静态变量与全局变量将与整个程序同时存在,即整个程序在运行时,这些变量就存在,整个程序结束时,这些变量则消失。而栈区用于存储例如局部变量、函数参数等变量,使用时动态增减。比如某些局部变量会随着函数的执行完毕而消失。栈区的内存分配的细则由编译器决定。堆区用于程序中自定义的内存分配,一般由程序编写者决定,比如malloc、new[2]

   结合上文对c/c++程序的内存空间的阐述,static 关键字自身的作用就是将变量的生存期设定为与整个程序同时存在,同时消失。在使用static关键字时,常常也需要考虑static变量的生存域问题,但本文只讨论static关键字所修饰的变量的生存期的问题。

参考资料 

[1] C++中的static . https://zhuanlan.zhihu.com/p/152046509

[2] C/C++ 中 static 的用法全局变量与局部变量 . https://www.runoob.com/w3cnote/cpp-static-usage.html

相关