在C++中,我们经常难以说清楚全局变量、局部变量和静态局部变量的区别。本博客从变量存储特性和标识符作用域两个角度区分这三个变量。
首先,我们来看看C++程序的内存区域是如何分配的。
从上图,我们可以看到,C++程序的内存区域分为代码区、全局数据区、堆区和栈区。其中,全局变量和静态局部变量存放在全局数据区,这两个变量在程序开始时就已经分配和初始化存储空间了。而普通局部变量存放在栈区,它在程序进入声明的代码块时生成,在结束代码块时删除。
其次,从标识符作用域的角度,我们可以认为:
1. 全局变量和静态局部变量具有文件作用域;
2. 普通局部变量具有函数作用域或者块作用域。