一些关于Mac系统malloc函数的闲话

本文探讨了Mac系统中malloc函数的工作原理和内存分配策略,包括预先请求虚拟内存页面、使用metadata记录内存状态、内存整理以及针对不同大小内存的分配优化。在Mac上,malloc的实现是开源的,通过malloc.c和magazine_malloc.c文件进行管理,并在不同的内存大小区间采用不同的分配逻辑以提升效率。文章还提到了面试中设计垃圾回收机制的问题,表达了深入研究的意愿。
摘要由CSDN通过智能技术生成

   Mac上由kernel负责给所有的程序。分配内存。kernel通过将应用程序的内存空间(每页4kb)和虚拟内存页面相连接(map)来实现内存的分配。

   在应用程序中可以使用mmap来实现上述方式的内存分配,每次分配4kb,也可以直接使用的栈上的内存(默认64kb),这些内存是为每个线程自动生成的。

    大多数情况下,我们讨论的内存分配,是指通过malloc方式分配出来的内存,与使用mmap直接分配虚拟页地址不同的是,malloc可以以比4kb小的粒度来分配内存,这样就不用每次都调用mmap方法,效率也提高了一点。当然,malloc本质上都是从kernel通过map方式分配的虚拟内存页来获得自己的内存,区别就是,malloc拿到内存页面之后,会把它们分成更小的模块来适应小规模的内存分配。


   Mac上类似于:alloc , allocWithZone, calloc , realloc ,valloc ,malloc_zone_malloc,  malloc_zone_calloc , malloc_zone_valloc , malloc_zone_realloc , malloc_zone_batch_malloc 这些内存分配的方法的最终实现都是一样的。


   关于Malloc的最终实现的一些想法:

   1 此Malloc最终实现预先向kernel请求一系列虚拟内存页面,在有内存分配请求的时候,返回这些内存页面中连续空白区域的指针。为了知道那些内存是空闲的,这个方法还必需用一个metadata来记住所有内

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值