我知道kmalloc()
可以替换内核空间上的malloc()
。很多人认为malloc()
无法在内核空间中运行;但是,我在linux-4.9.6/include/linux/decompress/mm.h
static void *malloc(int size)
{
void *p;
if (size < 0)
return NULL;
if (!malloc_ptr)
malloc_ptr = free_mem_ptr;
malloc_ptr = (malloc_ptr + 3) & ~3; /* Align */
p = (void *)malloc_ptr;
malloc_ptr += size;
if (free_mem_end_ptr && malloc_ptr >= free_mem_end_ptr)
return NULL;
malloc_count++;
return p;
}
这是否意味着我们可以在内核级别使用malloc()
?
答案 0 :(得分:2)
总之:不。
该代码之前的注释解释了它的用途:
* Memory management for pre-boot and ramdisk uncompressors
此代码仅在kmalloc()
可用之前的系统初始化中很早就使用。 (甚至可能在它的代码被解压缩之前!)它非常有限 - 它不能*释放内存 - 因此它只能在非常小的范围内使用。
如果需要在内核中分配内存,则必须使用kmalloc()
系列中的函数。
*:虽然有free()
的实现与此malloc()
配对,但它只能在一个非常特定的情况下释放内存:每个已分配的块都已被释放。