一、C语言中,常量存储在哪儿?static
全局变量和static
局部变量存储在哪儿?
全局变量(外部变量)的说明之前再冠以static
就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于
非静态全局变量的作用域是整个源程序,
当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的,
而静态全局变量则限制了其作用域。
即只在定义该变量的源文件内有效,
在同一源程序的其他源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其他源文件中引起错误。
二、static
全局变量与普通的全局变量有什么区别?
static
全局变量只初始化一次,防止在其他文件单元中被是引用。
三、static
局部变量与普通的局部变量有什么区别?
static
局部变量只被初始化一次,下一次依据上一次结果值。
四、局部变量、静态局部变量、静态全局变量存储位置
变量类型 | 存储位置 |
---|---|
局部变量 | 静态区(全局区) |
局部静态变量 | 静态区(全局区)的常量区 |
全局静态变量 | 静态区(全局区) |
五、各存储区的定义
栈区(stack) —— 由编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构中的栈。
堆区(heap) —— 一般由程序员分配释放。若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
全局区(静态区)(static) —— 全局变零和静态变量的存储是放在一起的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,- 程序结束后由系统释放。
文字常量区 —— 常量字符串就是放在这里的。- 程序结束后由系统释放。
程序代码区 —— 存放函数体的二进制代码。
六、NOTES
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。
堆,就是那些由
new
分配的内存块,他们的释放编译器不去管,由应用程序控制,一般一个new
就要对应一个delete
。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。自由存储区,就是那些由
malloc
分配的内存块,它和堆十分相似,不过它是用free
来结束自己的生命。全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分,它们共同占用一块内存区。
常量存储区,这是一块比较特殊的存储区,它们存放的是常量,不允许被修改。
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏