关于lab4动态内存分配的问题
匿名2023/07/31 19:51:19提问
    lab4student
339

在这一章当中,https://rcore-os.github.io/rCore_tutorial_doc/chapter4/part2.html, 要求是一个动态管理内存的模块。 

我想问的一个问题就是,这个buddy system 和上一节写的静态segment tree的管理器之间是什么关系呢?

从我个人的理解来看,似乎必须实现这样一个动态分配器,并告诉rust编译器我们有这样一个allocator,才能使用Box 或Rc。 看上去像是在写runtime。可是文档也说,它期待在虚存上完成分配,可是我们写的却是实际的物理内存?

第三个问题来自 学长 buddy system的一个实现: https://docs.rs/buddy_system_allocator/0.3.6/src/buddy_system_allocator/lib.rs.html#1-334 。 这是一个基于linked list的真正意义上 unix-like的 buddy system,但是把真正动态分配物理内存的那部分隐藏在了linked list的抽象之下了? 

第四个问题是 : https://doc.rust-lang.org/beta/std/alloc/trait.GlobalAlloc.html, 在trait GlobalAlloc上, 它规定了alloc api

unsafe fn alloc(&self, layout: Layout) -> *mut u8
[−]
Allocate memory as described by the given layout.

Returns a pointer to newly-allocated memory, or null to indicate allocation failure.

这个memory地址是8 bits , 说明肯定是基于一个偏移的,从我们自己的test可以看到,是基于 .bss的基地址的。那么是什么机制保证了rust在只知道偏移的情况下自己安排到相应地方上的。

期待助教和老师和各位大佬不吝赐教!

回答(1
    推荐问答
      Simple Empty
      暂无数据