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申请的是虚拟地址还是内存地址

堆----》虚拟地址

free后的内存会归还操作系统吗---brk和mmap的区别

free怎么知道要释放多大的内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值