堆内存
1、堆是内存空间。堆是区别于栈区、全局数据区和代码区的另一个内存区域。堆运行程序在运行时(而不是编译时),申请某个大小的内存空间。
2、获得堆内存
函数malloc()是C程序获得堆内存的一个方法,在alloc.h的头文件中声明。该函数从堆内存中"切下"一块size(运行时决定的)大小的内存,并将指向该内存的地址返回。
3、示例代码
#include<iostream.h> #include<alloc.h> int main(){ int arraysize;//元素个数 int *array; cout<<"please input a number of array elements:\n"; cin>>arraysize; //下列代码是防止堆内存用光情况发生 if((array=(int*)malloc(arraysize * sizeof(int)))==NULL){ cout<<"can't allocare more memory,terminating.\n"; exit(1); } for(int count=0;count<arraysize;count++){ array[count]=count*2; } for(int count=0;count<arraysize;count++) cout<<array[count]<<" "; cout<<endl; free(array);//释放堆内存 }
4、new和delete
new和delete是C++专有的操作符,他们不用头文件声明。new类似于函数malloc(),分配堆内存,但比malloc()更简练。
new的操作数为数据类型,它可以带初始化值表或者单元个数。new返回一个具有操作数值数据类型的指针。
new和delete在性能略逊于函数malloc()和free(),但更安全并具有更丰富的功能。