diff --git a/source/chapter4/1rust-dynamic-allocation.rst b/source/chapter4/1rust-dynamic-allocation.rst index ea58ea82..b3b9ee6e 100644 --- a/source/chapter4/1rust-dynamic-allocation.rst +++ b/source/chapter4/1rust-dynamic-allocation.rst @@ -8,7 +8,7 @@ Rust 中的动态内存分配 到目前为止,如果将当前的操作系统内核也看成一个应用,那么其中所有的变量都是被静态分配在内存中的,这样在对空闲内存的动态使用方面缺少灵活性。我们希望能在操作系统中提供动态申请和释放内存的能力,这样就可以加强操作系统对各种以内存为基础的资源分配与管理。 -在应用程序的视角中,动态内存分配中的内存,其实就是操作系统管理的“堆 (Heap)”。但现在要实现操作系统,那么就需要操作系统自身能提供动态内存分配的能力。如果要实现动态内存分配的能力,需要操作系统需要有如下功能: +在应用程序的视角中,动态内存分配中的内存,其实就是操作系统管理的“堆 (Heap)”。但现在要实现操作系统,那么就需要操作系统自身能提供动态内存分配的能力。如果要实现动态内存分配的能力,需要操作系统提供如下功能: - 初始时能提供一块大内存空间作为初始的“堆”。在没有分页机制情况下,这块空间是物理内存空间,否则就是虚拟内存空间。 - 提供在堆上分配和释放内存的函数接口。这样函数调用方通过分配内存函数接口得到地址连续的空闲内存块进行读写,也能通过释放内存函数接口回收内存,以备后续的内存分配请求。 @@ -49,7 +49,7 @@ Rust 中的动态内存分配 - 内碎片:已被分配出去(属于某个在运行的应用)内存区域,占有这些区域的应用并不使用这块区域,操作系统也无法利用这块区域。 - 外碎片:还没被分配出去(不属于任何在运行的应用)内存空闲区域,由于太小而无法分配给提出申请内存空间的应用。 - 为何应用开发者在编程中“看不到”内存碎片?这是因为动态内存管理有更底层的系统标准库来完成的,它能看到并进行管理。而应用开发者只需调用系统标准库提供的内存申请/释放函数接口即可。 + 为何应用开发者在编程中“看不到”内存碎片?这是因为动态内存管理是由更底层的系统标准库来完成的,它能看到并进行管理。而应用开发者只需调用系统标准库提供的内存申请/释放函数接口即可。 鉴于动态分配是一项非常基础的功能,很多高级语言的系统标准库中都实现了它。以 C 语言为例,C 标准库中提供了如下两个动态分配 的接口函数: