iOS-底层原理 06:malloc 源码分析 思路

2020-09-09  本文已影响0人  Style_月月

iOS-底层原理 06:malloc 源码分析

iOS-底层原理 02:alloc & init & new 源码分析文章中,alloc有3个核心操作,其中一个就是calloc,即申请内存,这就是今天需要探索的内容,其实探索的本质也是为了验证 ios中对象中实际的对齐方式是8字节对齐

objc4中分析calloc 源码

这里calloc的探索需要切换到 libmalloc源码中,可以在这里下载最新版,接着往下走

libmalloc中分析calloc源码

那么重点来了!!!想要继续跟进源码,可以通过以下方式:

断点断在zone的位置,此时通过lldb命令p zone->alloc 是不行的,因为zone没有赋值

zone 未赋值的验证

继续跟踪源码

#define SHIFT_NANO_QUANTUM      4
#define NANO_REGIME_QUANTA_SIZE (1 << SHIFT_NANO_QUANTUM)   // 16

static MALLOC_INLINE size_t
segregated_size_to_fit(nanozone_t *nanozone, size_t size, size_t *pKey)
{
    size_t k, slot_bytes;
    //k + 15 >> 4 << 4 --- 右移 + 左移 -- 后4位抹零,类似于16的倍数,跟 k/16 * 16一样
    //---16字节对齐算法,小于16就成0了
    if (0 == size) {
        size = NANO_REGIME_QUANTA_SIZE; // Historical behavior
    }
    k = (size + NANO_REGIME_QUANTA_SIZE - 1) >> SHIFT_NANO_QUANTUM; // round up and shift for number of quanta
    slot_bytes = k << SHIFT_NANO_QUANTUM;                           // multiply by power of two quanta size
    *pKey = k - 1;                                                  // Zero-based!

    return slot_bytes;
}

iOS-底层原理 05:内存对齐原理文末,已经提及过该算法,这里不再过多说明

先记录libmalloc源码中malloc分析的思路,需要时间研究源码,后续再补充完善!!!

参考链接

上一篇下一篇

猜你喜欢

热点阅读