全局变量、静态局部变量、局部变量、静态全局变量
全局变量 | 全局作用域 | 全局变量只需在一个源文件中定义,就可以作用于所有的源文件。其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。 | 静态存储区分配空间 |
静态全局变量 | 全局作用域 | 如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。 | 静态存储区分配空间 |
静态局部变量 | 局部作用域 | 只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在。静态局部变量只对定义自己的函数体始终可见。 | 静态存储区分配空间 |
局部变量 | 局部作用域 | 它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。 | 栈里分配空间 |
PS:
C++变量具有6种不同作用域:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。
可编程内存 | ||
---|---|---|
静态存储区 | 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。 | 主要存放静态数据、全局数据和常量。 |
栈区 | 在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。 | 栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 |
堆区(动态内存分配) | 程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在适当的时候用free或delete释放内存。 | 动态内存的生存期可以由程序员自己决定 |