DragonOS/docs/kernel/core_api/allocate-memory.md
LoGin bb5f098a86
Revert "新的内存管理模块 (#301)" (#302)
This reverts commit d8ad0a5e7724469abd5cc3cf271993538878033e.
2023-07-22 16:24:55 +08:00

1.3 KiB
Raw Blame History

内存分配指南

DragonOS提供了一些用于内存分配的api。您可以使用kmalloc来分配小的内存块,也可以使用alloc_pages分配连续的2MB大小的内存页面。

选择合适的内存分配器

在内核中,最直接、最简单的分配内存的方式就是,使用kmalloc()函数进行分配。并且,出于安全起见,除非内存在分配后一定会被覆盖,且您能确保内存中的脏数据一定不会对程序造成影响,在其余情况下,我们建议使用kzalloc()进行内存分配,它将会在kmalloc()的基础上,把申请到的内存进行清零。

您可以通过kmalloc()函数分配得到32bytes到1MBytes之间的内存对象。并且这些内存对象具有以下的性质

  • 内存起始地址及大小按照2次幂对齐。比如申请的是80bytes的内存空间那么获得的内存对象大小为128bytes且内存地址按照128bytes对齐

对于需要大量连续内存的分配,可以使用alloc_pages()向页面分配器申请连续的内存页。

当内存空间不再被使用时,那么必须释放他们。若您使用的是kmalloc()分配的内存,那么您需要使用kfree()释放它。若是使用alloc_pages()分配的内存,则需要使用free_pages()来释放它们。