C语言与C++内存管理

malloc、realloc、calloc和free几个函数的申明分别为:

void* malloc(unsigned size);

void* calloc(size_t numElements,size_t sizeof(Element));

void* realloc(void* ptr,unsigned newsize);

他们的返回值都是请求系统分配的地址,如果请求失败就返回NULL;

其中malloc用于申请一段新的地址,参数size为需要内存空间的大小;

calloc第一个参数为申请地址的单位元素长度,第二个为元素个数;

realloc是给一个已经分配了地址的指针重新分配空间,第一个参数为原有空间的地址,第二个为重新申请后的地址长度;

free调用形式为:free(void* ptr);  释放ptr所指向的一块内存空间。


C++通过new和delete动态管理内存:

其中:new、delete动态管理对象;new[]、delete[]动态管理对象数组。

malloc、free和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(void* ptr);

void* operator new[](size_t size);

void  operator delete[](void* ptr);

这几个均为函数,并非重载;

他们只负责分配空间/释放空间,不会调用对象构造函数/析构函数来初始化/清理对象;

实际上operator new和operator delete只是malloc、free的一层封装。

其中new干两件事:

1.调用operator new分配空间。

2.调用构造函数初始化对象。

delete也干两件事:

1.调用析构函数清理对象。

2.调用operator delete释放空间。

定位new表达式

定位new表达式是在已分配的原始内存空间中调用构造函数初始化一个对象

两种方式:new (place_address) type;

                   new (place_address) type(initializer-list);

place_address必须是一个指针,initializer-list是类型的初始化列表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值