变量,常量,静态变量存储的位置
常见的存储区域可分为:
1、栈
由编译器在需要的时候分配,在不需要的时候⾃动清楚的变量的存储区。⾥⾯的变量通常是局部变量、函数参数等。
2、堆
由new分配的内存块,他们的释放编译器不去管,由我们的应⽤程序去控制,⼀般⼀个new就要对应⼀个delete。如果程序员没有释放掉,程序会⼀直占⽤内存,导致内存泄漏,在程序结束后,操作系统会⾃动回收。
3、⾃由存储区
由malloc等分配的内存块,它和堆是⼗分相似的,不过它是⽤free来释放分配的内存。
4、全局/静态存储区
全局变量和静态变量被分配到同⼀块内存中,在以前的C语⾔中,全局变量⼜分为初始化的和未初始化的,在C++⾥⾯没有这个区分了,他们共同占⽤同⼀块内存区。
5、常量存储区
这是⼀块⽐较特殊的存储区,他们⾥⾯存放的是常量,不允许修改(当然,你要通过⾮正当⼿段也可以修改)。
例1:C语⾔程序
[cpp]
1. int x;
2. void main()
3. {
4. }
变量x存储在内存哪个区域?
答:在采⽤段式内存管理的架构中,BSS段(bss segment)通常是指⽤来存放程序中未初始化的全局变量的⼀块内存区域。
BSS是英⽂Block Started by Symbol的简称。BSS段属于静态存储区。
例2:static全局变量与普通全局变量有什么区别?
答:static全局变量和普通全局变量存储区域相同,不同的是:
static全局变量只在声明此static全局变量的⽂件中有效;
普通全局变量对整个源程序都有效,当此源程序包含多于⼀个⽂件的程序时,对其他⽂件依然有效。
字符串常量在内存中的存放位置例3:static局部变量与普通局部变量的区别?
答:static局部变量的存储区为静态存储区,普通局部变量的存储区为栈;
static局部变量⽣存周期为整个源程序,但是只能在声明其的函数中调⽤,并且其值与上⼀次的结果有关;⽽普通局部变量的⽣存周期为声明其函数的周期,超过特定的范围其值会被重新初始化;
static局部变量如果未初始化其值默认为0,⽽普通局部变量则不确定。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。