C++中堆内存(heap)的观念和操纵要领
当前位置:以往代写 > C/C++ 教程 >C++中堆内存(heap)的观念和操纵要领
2019-06-13

C++中堆内存(heap)的观念和操纵要领

C++中堆内存(heap)的观念和操纵要领

堆内存是什么呢?

我们知道在c/c++中界说的数组巨细必必要事先界说好,他们凡是是分派在静态内存空间可能是在栈内存空间内的,可是在实际事情中,我们有时候却需要动态的为数组分派巨细,在这里c库中的malloc.h头文件中的malloc()函数就为您办理了问题(bc可能是在老的尺度中是alloc.h),它的函数原形是void* malloc(size_t size),在动态开发的内存中,在利用完后我们要利用free()函数来释放动态开发的内存空间。

下面我们来看一个完整的例子:

//措施作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者
#include <iostream>
#include <malloc.h>
using namespace std;
main()
{
int arraysize; //元素个数
int *array; //用于动态开发数组的指针变量
cin>>arraysize;
array=(int*)malloc(arraysize * sizeof(int));//操作malloc在堆内存中开发内存空间,它的巨细是元素的个数乘以该数据范例的长度
for(int i=0;i<arraysize;i++)
{
array[i]=i;
}
for(int i=0;i<arraysize;i++)
{
cout<<array[i]<<",";
}
cout<<endl;
free(array);//操作free释放动态开发的堆内存空间
cin.get();
cin.get();
}

这里要出格留意个处所就是:

array=(int*)malloc(arraysize * sizeof(int));

malloc()的函数原形自己是void* malloc(size_t size),由于动态分派的空间计较机并不知道是用来做什么的所以是无范例的,但你要把它用在动态的整形数组上的时候就要显式的转换成int*了。

下面我们再先容c++所独占的开发和释放堆内存空间的要领,new修饰符和delete修饰符。

new和delete修饰符的操纵并不需要头文件的支持,这是c++所独占的,new操纵要比malloc更为简朴,直接说明开发的范例的数目就可以了,delete利用的时候假如是数组那么必需利用delete[]。

//措施作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者
#include <iostream>
using namespace std;
main()
{
int arraysize; //元素个数
int *array;
cin>>arraysize;
array=new int[arraysize];//开发堆内存
for(int i=0;i<arraysize;i++)
{
array[i]=i;
}
for(int i=0;i<arraysize;i++)
{
cout<<array[i]<<",";
}
cout<<endl;
delete[] array;//释放堆内存
cin.get();
cin.get();
}

    关键字:

在线提交作业