变量和存储区

来源:互联网 发布:淘宝图片怎么防盗 编辑:程序博客网 时间:2024/06/04 18:31

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

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

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

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

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

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

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

0 0