操作系统复习3 malloc如何分配内存

malloc分配内存

malloc是c语言的库函数,不支持重载

malloc的返回值是void*类型需要强制转换

malloc申请完的内存需要用free来进行释放内存

malloc申请空间失败会返回值为空

malloc申请的是虚拟内存地址,只有这块内存被访问时,才能发生映射,才会调用物理内存地址

malloc申请内存的方式

1. brk()

通过brk()系统调用从堆区申请内存空间

brk()是通过堆顶指针向高地址移动,进行空间申请

2. mmap

mmap()方式也称为私有匿名映射,也就是在文件映射区申请一块内存进行分配

3. 调用时机

当申请的内存小于128kb调用brk()

当申请的内存大于128kb调用mmap()

4. malloc申请的内存空间大小

申请的空间内存大小,并不是你说申请1字节空间,申请的就是1字节,malloc会分配更大的内存池

5. free释放内存

free释放掉的内存并不会返回给操作系统,而是返回给malloc的内存池,等下次申请堆区空间的时候可以直接将内存给过去,速度快很多直到进程结束才会将内存还给操作系统。

只有在mmap在文件映射区申请内存空间的时候才会返还给操作系统,但是这样有弊端,因为申请内存的过程要去内核空间申请,一次一次的访问内核空间,于是每次mmap 分配的虚拟地址都是缺页状态的,然后在第一次访问该虚拟地址的时候,就会触发缺页中断。
也就是说,频繁通过 mmap 分配的内存话,不仅每次都会发生运行态的切换,还会发生缺页中断,这样会导致 CPU消耗较大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值