首先,先看kzalloc()的定义:
/**
* kzalloc - allocate memory. The memory is set to zero.
* @size: how many bytes of memory are required.
* @flags: the type of memory to allocate (see kmalloc).
*/
static inline void *kzalloc(size_t size, gfp_t flags)
{
return kmalloc(size, flags | __GFP_ZERO);
}
可见,kzalloc()实现了kmalloc()以及memset()的功能,一个函数起到了两个函数的作用。
在我们申请内存的时候, 先是用 kmalloc() 申请空间 , 然后用 memset() 来初始化 。而现在可以直接调用 kzalloc(), 效果等同于原来那两个函数的作用。 这是内核中内存管理部分做出的改变,从 kmalloc/memset 到 kzalloc 的改变优化了内存管理,提高了内核的运行速度。