new和malloc的区别以及底层实现原理_list vector区别

new和malloc的区别以及底层实现原理_list vector区别new和malloc的区别1,new是操作符,malloc是函数;2,new开辟内存失败抛出异常,malloc申请内存失败返回NULL;3,new开辟的内存大小

new和malloc的区别   1,new是操作符,malloc是函数;   2,new开辟内存失败抛出异常,malloc申请内存失败返回NULL;   3,new开辟的内存大小不需要指定,malloc需要指定;   4,new开辟的内存的类型会自动推导,不需要强转,malloc需要强转;   (小型操场)   5,实现原理:   new会先调用operator new函数,申请足够的内存(通常底层使用malloc实现)。然后调用类型的构造函数,初始化成员变量,最后返回自定义类型指针。delete先调用析构函数,然后调用operator delete函数释放内存(通常底层使用free实现)。   new->malloc->构造函数->delete->析构函数->free;   malloc/free是库函数,只能动态的申请和释放内存,无法强制要求其做自定义类型对象构造和析构工作。所以malloc没有初始化功能,需要用户自己初始化。(只能申请内存,不能初始化)   malloc原理:   malloc函数用于动态分配内存。为了减少内存碎片和系统调用的开销,malloc采用内存池的方式,先从内核态申请大块内存作为堆区,然后将堆区分为多个内存块,放在用户态的内存池中。当用户申请内存时直接从用户态的内存池堆分配一块合适的空闲块,就不需要进入内核态申请内存,除非内存池中的内存已经用完。   malloc在申请内存时,一般会通过brk或者mmap系统调用来进行内存申请。其中当申请内存小于128k时,会使用系统函数brk在堆区分配;而当申请内存大于等于128k时,会使用系统函数mmap在映射区分配。   
new和malloc的区别以及底层实现原理_list vector区别   new和malloc申请的是虚拟地址还是内存地址   堆—-》虚拟地址   free后的内存会归还操作系统吗—brk和mmap的区别   free怎么知道要释放多大的内存

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/56321.html

(0)
上一篇 2024年 8月 31日 下午6:42
下一篇 2024年 8月 31日 下午6:47

相关推荐

关注微信