内存管理API之kcalloc

本文详细解析了kcalloc函数的工作原理及其实现方式。kcalloc函数用于分配指定大小的内存,并将其初始化为零。该函数首先检查请求的内存大小是否超过系统限制,然后使用kmalloc或__kmalloc进行内存分配。
static inline void *kcalloc(size_t n, size_t size, gfp_t flags) 为一个数组分配memory
并将memory中的内容清零。
其源码分析如下:
static inline void *kcalloc(size_t n, size_t size, gfp_t flags)
{
	#可以看到这里添加了flag __GFP_ZERO来让申请到的memory清零
	#调用kmalloc_array 来申请一个数组
	return kmalloc_array(n, size, flags | __GFP_ZERO);
}
static inline void *kmalloc_array(size_t n, size_t size, gfp_t flags)
{
	# size 大于最大值的话,则退出
	if (size != 0 && n > SIZE_MAX / size)
		return NULL;
	#如果size和n 都是常量的话,则调用kmalloc 申请内存,否则通过__kmalloc 来申请内存
	if (__builtin_constant_p(n) && __builtin_constant_p(size))
		return kmalloc(n * size, flags);
	return __kmalloc(n * size, flags);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值