问题/目标分析
[NSobjec alloc] 中使用的calloc()方法分析
方法分析
使用calloc源码,进行分析 源码地址:github.com/moyunyoukua…
实验步骤
通过断点进行调试运行。
calloc()中使用了内存对齐的算法,使用了位移的方法,加速了计算的速度。
static MALLOC_INLINE size_t
segregated_size_to_fit(nanozone_t *nanozone, size_t size, size_t *pKey)
{
// size = 40
size_t k, slot_bytes;
if (0 == size) {
size = NANO_REGIME_QUANTA_SIZE; // Historical behavior
}
// 40 + 16-1 >> 4 << 4
// 40 - 16*3 = 48
//
// 16
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;
}
结果分析
calloc() 代码流程结构图
总结实验
calloc申请内存大小为num_items*size,申请不同大小的内存时所走的流程是有差别的,。