C/C++内存分配方式以及存储分区
2014-04-27 17:45
281 查看
动态内存分配是指在程序运行时为程序中的变量分配内存空间,其完全由应用程序自己进行内存的分配和回收。然后内存分配方式并不是唯一的,内存分配方式包括以下3中:
1.从静态存储区域分配内存
程序在编译时就已经把该程序所占用的内存分配好了,并且该内存在整个程序的运行过程中一直是有效的,例如存放全局变量和静态变量。初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,程序结束后由系统自动释放该内存。
2.在堆栈上分配
在函数执行的这段时间,函数内部的局部变量的存储单元都创建在堆栈上,函数结束时存储单元被自动释放。
在堆栈上分配内存的缺点是堆栈内存分配运算内置于处理器的指令集中,效率高,并且一般不会存在失败的危险。但分配的内存容量有限,可能会发生堆栈溢出的情况。
在堆栈上分配内存的优点是在堆栈中分配内存可以避免或减少内存碎片的产生。
3.动态内存分配
动态数据区一般就是“堆”和“栈”,并且“堆”和“栈”是两种不同的动态数据区。
栈(stack)是一种线性结构。由编译器自动分配释放。栈是用来存放函数的参数值、局部变量、本地变量的值等。其操作方式类似于数据结构中的栈。
堆(heap)是一种链式结构。一般由程序员分配释放,否则会造成内存泄露。注意它与数据结构中的堆是两个完全不同的概念。
以上是内存的分配方式。
C/C++通常可以把内存理解成4个分区:栈、堆、全局/静态存储区以及常量存储区。
1.从静态存储区域分配内存
程序在编译时就已经把该程序所占用的内存分配好了,并且该内存在整个程序的运行过程中一直是有效的,例如存放全局变量和静态变量。初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,程序结束后由系统自动释放该内存。
2.在堆栈上分配
在函数执行的这段时间,函数内部的局部变量的存储单元都创建在堆栈上,函数结束时存储单元被自动释放。
在堆栈上分配内存的缺点是堆栈内存分配运算内置于处理器的指令集中,效率高,并且一般不会存在失败的危险。但分配的内存容量有限,可能会发生堆栈溢出的情况。
在堆栈上分配内存的优点是在堆栈中分配内存可以避免或减少内存碎片的产生。
3.动态内存分配
动态数据区一般就是“堆”和“栈”,并且“堆”和“栈”是两种不同的动态数据区。
栈(stack)是一种线性结构。由编译器自动分配释放。栈是用来存放函数的参数值、局部变量、本地变量的值等。其操作方式类似于数据结构中的栈。
堆(heap)是一种链式结构。一般由程序员分配释放,否则会造成内存泄露。注意它与数据结构中的堆是两个完全不同的概念。
以上是内存的分配方式。
C/C++通常可以把内存理解成4个分区:栈、堆、全局/静态存储区以及常量存储区。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- IE7降低内存和降低CPU的几个技巧
- 如何高效的使用内存
- DOS下内存的配置
- XP/win2003下发现1G的内存比512M还慢的解决方法
- C/C++数据对齐详细解析
- C++中引用的使用总结
- C与C++之间相互调用实例方法讲解
- C++中引用(&)的用法与应用实例分析
- 解析C++ 浮点数的格式化输出
- 深入分析C++中几个最不常用的关键字
- c++中inline的用法分析
- C++ Primer 第一部分基本语言
- 解析C语言中位字段内存分配的问题
- 深入解析C++ Data Member内存布局
- 从汇编看c++中默认构造函数的使用分析
- 关于C++中的友元函数的一些总结
- C++的sstream标准库详细介绍
- 基于C++自动化编译工具的使用详解