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来记住所有内