内存分配和管理

内存分配和管理

malloc、calloc、realloc、alloca

1.malloc:申请指定字节数的内存。申请到的内存中的初始值不确定。

2.calloc: 为指定长度的对象,分配能容纳其指定个数的内存。申请到的内存每一位(bit)都初始化为0。

3.realloc:更改以前分配的内存长度(增加或减小),当增加长度时,可能需将以前分配区的内容移到另一个足够大的区域,而新增区域内的初始值不确定。

4.alloca:在栈上申请内存。程序在出栈的时候,会自动释放内存。但是需要注意的是,alloca不具有可移植性,而且没有在传统堆栈的机器上很难实现。alloca不宜使用在必须广泛移植的程序中。c99中支持变长数组(VLA),可以用来替代alloca。

malloc free

用于分配、释放内存malloc、free使用

申请内存,确认是否申请成功

char *str = (char*)malloc(100);

assert(str != nullptr);

释放内存后指针置空

free(p);

p = nullptr;

new delete

1.new/new[]:完成两件事,先底层调用malloc分配了内存,然后调用构造函数(创建对象)。

2.delete/delete[]:也完成两件事,先调用析构函数(清理资源),然后底层调用free释放空间。

3.new在申请内存时会自动计算所需字节数,而malloc则需要我们自己输入申请内存空间的字节数。

new delete使用

int main(){

T* t = new T(); //先内存分配,再构造函数

delete t; //先析构函数,再内存释放

return 0;

}

delete this合法吗?

合法,但:

1.必须保证this对象是通过new (不是new[]、不是placement new、不是栈上、不是全局、不是其他对象成员)分配的。

2.必须保证调用delete this的成员函数是最后一个调用this的成员函数。

3.必须保证成员函数的delete this后面没有调用this了。

4.必须保证delete this后面没有人使用了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值