【C++学习】变量和存储区

存储区一般分为以下五种:
栈区:
由编译器在需要的时候进行分配,不需要的时候会自动清空,栈区一般比较小,对于较大的数组不应该放入栈区。
堆区:
由new分配的空间,他们的释放由程序中的语句进行操作。由delete释放,如果没有释放,就会在程序结束时自动回收。
代码区:
存放代码的二进制代码。
全局(静态)存储区:
全局变量和静态变量被分配到同一块内存中。
常量存储区:
存放的数据都是常量,不允许被修改。

重点一:堆栈的区别
1.管理方式不同:
栈区是系统自动进行分配释放的。
堆区是手动分配释放。
2.空间问题:
堆是采用队列优先的方式进行的,如果大量的进行new和delete就会造成内存空间的间断性,产生很多空间内存碎片。
3.生长方向:
对于堆来讲,生长方向是向上的,也就是向着内存地址增加的方向;对于栈来讲,它的生长方向是向下的,是向着内存地址减小的方向增长。
4.分配效率:
栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是函数库提供的,它的机制是很复杂的。总之,栈效率高于堆效率。(而且堆空间会有很多碎片,所以分配大空间效率很低)

如果堆栈一起说就是表示栈,而不是堆。

重点二:堆和自由存储区的区别
这个问题没必要纠结,有的地方进行了有的地方都归属为堆。(这个是取决与malloc与new的实现机制)

重点三:静态存储方式和动态存储方式(按照时间)
静态存储方式就是指在程序运行期间分配固定的存储空间的方式。(eg.全局变量)
动态存储方式就是指在程序执行过程中,使用的时候才分配存储单元,使用完立即释放。
典型的例子就是调用函数,形参只有在调用的时候才会分配,调用结束就会释放。
生命期表示了变量的存在时间。

重点四:全局变量和局部变量(按照空间)
全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。
局部变量是指由某对象或某个函数所创建的变量,只能被内部引用,而无法被其它对象或函数引用。

重点五:存储类型说明:
auto 自动变量
register 寄存器变量
extern 外部变量
static 静态变量
自动变量和寄存器变量属于动态存储方式, 外部变量和静态变量属于静态存储方式。
所以,静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值