calloc() 流程分析

312 阅读1分钟

问题/目标分析

[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,申请不同大小的内存时所走的流程是有差别的,。