learningOS开源操作系统社区
  • 首页
  • 训练营
  • 明星学员
  • 共建单位
  • 项目实习
  • 问答论坛
登录
    Copyright © 2024 opencamp.ai All rights reserved.
    关于lab4动态内存分配的问题
    匿名2023/07/31 19:51:19提问
      lab4student
    603

    在这一章当中,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
        暂无数据