# 内存分配指南 — DragonOS dev 文档

# 内存分配指南

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

## 选择合适的内存分配器

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

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

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

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

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

Other Versions v: V0.1.2

Tags
  V0.1.0
  V0.1.1
  V0.1.10
  V0.1.2
  V0.1.3
  V0.1.4
  V0.1.5
  V0.1.6
  V0.1.7
  V0.1.8
  V0.1.9
  V0.2.0
  V0.3.0
  V0.4.0

Branches
  master