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);
}
内存管理API之kcalloc
最新推荐文章于 2022-12-27 22:02:05 发布