C与C++内存分配专题(malloc/calloc/realloc/_alloca/new)

1.函数原型
void* malloc(size_t size);
void* calloc(size_t nmemb, size_t size);
void* realloc(void* p,size_t newsize);
void* _cded_alloca(size_t);
2.区别
malloc: malloc()函数接收一个参数,为要分配的内存空间的大小。在内存的动态存储中分配一块长度为size字节的连续区域。分配空间时,不能进行同时的初始化,需要利用memset进行初始化,如果申请到的空间是已经用过的,则很有可能遗留下各种各样的数据,如果没有进行及时的额初始化,则程序运行的时候很有可能出现错误。
calloc: calloc()函数接收两个参数,为元素的个数和每个元素的大小。使用时不能在另外利用其它函数进行初始化,因为在分配空间的同时calloc函数会把空间中的每一位都初始化为0。
realloc: realloc()函数接收两个参数,为原有空间的地址和重新申请的地址空间。可以对给定的指针所指向的空间进行扩大或缩小,原有内存中的内容保持不变。
_alloca: _cded_alloca()函数接收一个参数,为要分配的内存空间的大小。_allocao是在栈上申请空间,用完之后马上就释放。
new: new为C++关键字,使用的时候不用依赖任何的头文件,与malloc作用类似,但是new返回指定类型的指针,并且可以自动计算所需要大小,而malloc则必须要由我们自己计算字节数,并且在返回后强行转换为实际类型的指针。且malloc和free不能激活构造函数和析构函数,也就是说不能为对象申请空间,而new和delete可以。
返回值:
调用成功后malloc和calloc都将返回所分配内容空间的首地址,realloc返回的指针可能指向新的地址。
开辟空间区别:
malloc/calloc/realloc均为在堆上开辟空间,使用完之后必须free释放,否则会造成内存泄漏的问题。_alloc为在栈上开辟空间,栈上空间具有作用域,在函数结束时会自动释放,由编译器自动维护。

**注:**new关键字为C++内容,笔者将会在继续更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值