浅析C语言中五大内存管理
2016-12-07 14:30
225 查看
在c++中,内存分为5个区,分别是栈区,堆区,自由存储区,全局/静态存储区和常量存储区.
1.栈区:是编译器在需要的时候分配,不需要的时候自动清除的存储区,一般存储空间比较小,里面放的变量是局部变量,函数参数等;(不会产生碎片)
2.堆区:是我们程序员手动alloc 或者new出来的内存,这块内存需要我们自己手动管理,编译器是不会干预的,在手动内存管理(MRC)中,遵循谁添加谁释放的原则.不然可能会造成内存泄露.另外堆是动态分配内存,并且恨意分配使用很大的内存,使用不当会产生碎片(类似磁盘碎片)在程序结束后,操作系统会自动回收;
3.自动存储区:是由malloc分配的内存块,他和堆十分相似,他的释放是由free关键字来完成;
4.全局/静态存储区,全局变量和静态变量被分配到同一块内存中;static修饰的变量
5.常量存储区:这是一块比较特殊的存储区,他们里面存放的是常量.是不允许被修改的.
注:1.函数体中定义的常量通常是申请在栈上,但是用malloc.realloc等分配的内存的是在堆上;
2.在栈上存取数据比通过指针在堆上存取数据效率更高.
1.栈区:是编译器在需要的时候分配,不需要的时候自动清除的存储区,一般存储空间比较小,里面放的变量是局部变量,函数参数等;(不会产生碎片)
2.堆区:是我们程序员手动alloc 或者new出来的内存,这块内存需要我们自己手动管理,编译器是不会干预的,在手动内存管理(MRC)中,遵循谁添加谁释放的原则.不然可能会造成内存泄露.另外堆是动态分配内存,并且恨意分配使用很大的内存,使用不当会产生碎片(类似磁盘碎片)在程序结束后,操作系统会自动回收;
3.自动存储区:是由malloc分配的内存块,他和堆十分相似,他的释放是由free关键字来完成;
4.全局/静态存储区,全局变量和静态变量被分配到同一块内存中;static修饰的变量
5.常量存储区:这是一块比较特殊的存储区,他们里面存放的是常量.是不允许被修改的.
注:1.函数体中定义的常量通常是申请在栈上,但是用malloc.realloc等分配的内存的是在堆上;
2.在栈上存取数据比通过指针在堆上存取数据效率更高.
相关文章推荐
- c语言指针占几个字节
- c/c++--C之从文件流中读写整数
- C++继承详解:共有(public)继承,私有(private)继承,保护(protected)继承
- C++惯用法:奇特的递归模板模式(Curiously Recurring Template Pattern,CRTP,Mixin-from-above)
- C++ 合并文件夹下所有的txt文件
- C++ typedef用法小结
- 输出图形平行四边形
- 找出一个二维数组中的鞍点 即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。
- 已有一个已经排好序的数组,输入一个数,要求按照原来排序的规律将它插入数组中
- C#调用C++编写的DLL函数各种参数传递问题
- C/C++ typedef用法详解(真的很详细)
- C/C++,字符串的UTF-8与GBK(或GB2312)编码转换
- 【NOIP2016普及组】复赛——买铅笔
- C语言——大数阶乘
- 虚幻4翻译文档-实用程序表达式 | Unreal Engine
- C语言---那些容易被忽略的细节
- 【C++笔记】 strcpy函数的实现
- C++primer第4版第十一章泛型算法
- HDU 2028 Lowest Common Multiple Plus
- JNI中利用java调用底层C++代码