0
点赞
收藏
分享

微信扫一扫

Moonbeam近日提案公投一览

快乐码农Alan007 2023-05-19 阅读 79

new是个运算符 使用:= new 类型(初始值);

malloc和new的区别:

1--new申请空间失败抛出异常,malloc返回指针
               ip(new(nothrow) Int(10))//不想它抛出异常
2--new调用构造函数
3--new可以重载(运算符)
4--new不用强制类型转换,应用比较简单,new申请内存无需指定内存大小


new 的4步

        1.计算大小2.malloc申请大小3.创建对象4.返回地址


delete

delete时被删除的空间被填充成0xdddddddd

        new申请数组时释放空间必须用delete[],如果只delete一个会出错。

        若new一个,却用了delete[]会导致不停的释放空间。

delete[]怎么知道删除多少个?

        当new一个数组时,new创建空间sizeof(Int)*n+4,4是放new指针的数量的位置
空间上下分别还多4个字节放在头,尾分别是上越界标记、下越界标记,填充为fdfdfdfd,
最上部份有头部信息指向前一个指针,和下一个指针会把分配的字节串成一个链,
delete[]时从数组头向前读4个字节,读取那个4字节知道要析构多少次。

申请一个对象,删除一组会死循环。
申请一个对象没有多的4个标记,用delete[]删会将上越界标记当要删除的个数,fdfdfd很大。

申请字节数越小,辅助空间越大,头部越界标记等占比越大。


内存泄漏的本质:

        丢失内存地址,找不回地址了,永远不会释放了。


ptmalloc

ptmalloc是内核中的内存管理,free的空间在此暂存一段时间,
申请字节有一个阈值,小于阈值直接在这里面找,减少对内核空间的扰动

举报

相关推荐

0 条评论