变量和存储区
来源:互联网 发布:淘宝图片怎么防盗 编辑:程序博客网 时间:2024/06/04 18:31
存储区一般分为以下五种:
栈区:
由编译器在需要的时候进行分配,不需要的时候会自动清空,栈区一般比较小,对于较大的数组不应该放入栈区。
堆区:
由new分配的空间,他们的释放由程序中的语句进行操作。由delete释放,如果没有释放,就会在程序结束时自动回收。
代码区:
存放代码的二进制代码。
全局(静态)存储区:
全局变量和静态变量被分配到同一块内存中。
常量存储区:
存放的数据都是常量,不允许被修改。
重点一:堆栈的区别
1.管理方式不同:
栈区是系统自动进行分配释放的。
堆区是手动分配释放。
2.空间问题:
堆是采用队列优先的方式进行的,如果大量的进行new和delete就会造成内存空间的间断性,产生很多空间内存碎片。
3.生长方向:
对于堆来讲,生长方向是向上的,也就是向着内存地址增加的方向;对于栈来讲,它的生长方向是向下的,是向着内存地址减小的方向增长。
4.分配效率:
栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是函数库提供的,它的机制是很复杂的。总之,栈效率高于堆效率。(而且堆空间会有很多碎片,所以分配大空间效率很低)
如果堆栈一起说就是表示栈,而不是堆。
重点二:堆和自由存储区的区别
这个问题没必要纠结,有的地方进行了有的地方都归属为堆。(这个是取决与malloc与new的实现机制)
重点三:静态存储方式和动态存储方式(按照时间)
静态存储方式就是指在程序运行期间分配固定的存储空间的方式。(eg.全局变量)
动态存储方式就是指在程序执行过程中,使用的时候才分配存储单元,使用完立即释放。
典型的例子就是调用函数,形参只有在调用的时候才会分配,调用结束就会释放。
生命期表示了变量的存在时间。
重点四:全局变量和局部变量(按照空间)
全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。
局部变量是指由某对象或某个函数所创建的变量,只能被内部引用,而无法被其它对象或函数引用。
重点五:存储类型说明:
auto 自动变量
register 寄存器变量
extern 外部变量
static 静态变量
自动变量和寄存器变量属于动态存储方式, 外部变量和静态变量属于静态存储方式。
所以,静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量。
- 变量和存储区
- 动态存储变量和静态存储变量
- 工作区变量的存储和调用
- 变量的存储方式和存储类别
- 03. 类型、存储和变量
- 堆栈和变量的存储
- 变量的存储区
- C++变量存储区
- 变量存储区
- c中变量的存储区和生存期
- c中变量的存储区和生存期
- 关于变量存储区和堆栈等的一些说明
- 西门子PLC编程变量存储区和位存储区的区别?
- c语言变量存储区
- 第2章 变量和数据存储
- C语言变量和数据存储
- 变量的作用域和存储期
- C语言变量和数据存储
- (七)Spring详解——资源Resource接口
- 数据结构-树-二叉树-定义,遍历
- 跑马灯实验-位带操作版
- JSON
- C++变量的声明与定义
- 变量和存储区
- 大白话之设计模式--简单工厂模式理解记忆
- 让MFC不显示界面
- C语言递归与非递归实现求第n个斐波那契数
- 数据结构-树-定义,哈夫曼
- Java反射机制
- XML解析
- jni开发中的常见错误
- 【Maven】——初识Maven