内存管理--堆

来源:互联网 发布:台风莫兰蒂数据 编辑:程序博客网 时间:2024/05/01 19:07

 

1.堆的简介

有栈对于面向过程的程序设计还远远不够,因为栈上的数据在函数返回的时候就会被释放掉,所以无法将数据传递至函数外部。而全局变量没有办法动态地产生,只能在编译的时候定义,有很多情况下缺乏表现力。在这种情况下,堆(Heap)是唯一的选择。

堆是一块巨大的内存空间,常常占据整个虚拟空间的绝大部分。在这片空间里,程序可以请求一块连续内存,并自由地使用,这块内存在程序主动放弃之前都会一直保持有效。

2.什么时候创建堆

(1)malloc函数

例:int*p;

p=(int*)malloc(sizeof(int));

使用malloc函数分配内存时,返回值要经过类型转换才可赋予一个指针变量。该函数如分配内存成功,则返回其始地址,否则返回NULL。头文件为#include<stdlib.h>。

(2)new运算符

例:int*p,*q;

p=new int;//申请分配一个int型内存空间

p=new int(10);//申请一个int型空间存放10

q=new int[10];//申请分配10个int型的内存空间

new分配内存时不需要类型转换。用new申请的空间必须要用delete释放。而且指针值不能改变。形式有:delete指针变量名(可释放一个内存单元)、delete[]指针变量名(可释放若干个内存单元)。

3.堆的管理

运行库相当于是向操作系统“批发”了一块较大的堆空间,然后“零售”给程序用。当全部“售完”或程序有大量的内存需求时,再根据实际需求向操作系统“进货”。当然运行库在向程序零售堆空间时,必须管理它批发来的堆空间,不能把同一块地址出售两次,导致地址的冲突。于是运行库需要一个算法来管理堆空间,这个算法就是堆的分配算法。

原创粉丝点击