C语言动态内存管理
malloc:申请一块动态空间(一个参数)
calloc:申请一块动态空间(两个参数)
realloc:调整已经申请好的动态空间的大小
free:释放已申请的动态空间
void Test()
{
int*p1=(int*)malloc(sizeof(int)*4);
free(p1);
int*p2=(int*)calloc(4,sizeof(int));
int*p3=(int*)realloc(p2,sizeof(int)*6);
free(p3);//不需要free(p2)
}
C++动态内存管理
new/delete动态管理对象。
new[]/delete[]动态管理对象数组。
void Test()
{
int*p4=new int();//分配4个字节
int*p5=new int(3);//分配4个字节并初始化为3
int*p6=new int[10];//分配40个字节10个整形空
delete p4;
delete p5;
delete p6[];
}
注意: malloc/free、new/delete、new[]/delete[] 一定要匹配使用,否则可能出现内存泄漏的问题。
1.它们都是动态内存管理的入口。
2.malloc/free是C/C++的库函数,new/delete是C++操作符。
3.malloc/free只是动态分配内存/释放空间,而new/delete除了分配空间还调用构造函数和析构函数进行初始化和清理。
4.malloc/free需要手动计算大小且返回值为void*,new/delete可自动计算类型的大小,返回值为对应的指针类型。
C++其他内存管理接口
void* operator new(size_t size);
void operator delete(size_t size);
void* operator new[](size_t size);
void operator delete[](size_t size);