在内核空间malloc()?

我知道kmalloc()可以取代内核空间上的malloc() 。 很多人认为malloc()不能在内核空间运行, 不过,我在linux-4.9.6/include/linux/decompress/mm.hfind了这个定义

 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()

总之:没有。

该代码之前的注释说明了它的作用:

  * Memory management for pre-boot and ramdisk uncompressors 

kmalloc()可用之前,此代码仅在系统初始化中使用很早。 (可能甚至在它的代码被解压缩之前!)它是令人难以置信的限制 – 它不能*释放内存 – 所以它只能用于一个非常小的规模。

如果您需要在内核中分配内存,则必须使用kmalloc()系列中的函数。


*:虽然有一个free()malloc() free()配对的实现,但它只能在一个非常特定的情况下释放内存:当每个分配的块被释放时。