很久以前写过一篇关于C语言程序内存分布的博客https://blog.csdn.net/qq_37120369/article/details/104349078
现在,再对之前的一些知识进行补充
一、作用域:
全局变量的作用域有两种情况:
1、全局作用域在程序的各个角落都可以访问到
2、文件作用域只在当前代码文件中访问并使用
局部变量的作用域只在对应“{}”内有效
二、生命周期:
全局数据区中变量的生命周期从程序运行开始到程序销毁
栈空间中变量的生命周期从进入作用域开始到离开作用域销毁
三、C语言内存划分:
1、全局数据区(又称静态存储区,包括.bss段和.data段,存放全局变量、静态变量)
2、只读数据段(又称.rodata段,存放const、#define、类似“abc”的字符串常量等数据)
3、栈空间(存放函数参数,局部变量)
4、堆空间(程序员自己分配的,比如malloc函数申请,free函数释放)
那么问题来了,Static修饰的全局变量和局部变量都放在全局数据区,那么他们有什么区别?
1、Static修饰的局部变量只初始化一次,生命期为整个程序的生命期,作用域依旧为局部
2、Static修饰的全局变量与普通的全局变量相比只是作用域变为了文件作用域