计算内存块

时间:2009-10-17 23:10:16

标签: memory-management linked-list

这是编译器设计课程的作业问题。我只需要解释问题的某些部分。

  

声称将块返回到标准内存管理器   需要很多管理。为什么   单身是不够的   每个块的计数器,它持有   该块的忙记录数,   并在它时返回块   达到0?

它所指的上下文谈论链表。

答题纸上的答案说明:

  

你如何找到这个计数器开始   从指针到记录以及如何   你得到了指针吗?   回到街区?

来自基于C的背景。有人可以向我解释一下:

  1. 阻止是?
  2. 柜台呢?
  3. 忙碌的记录是?
  4. 对文件的引用,该文件提供了在计数阶段发生的事情的演练。图表会有所帮助。

    感谢。

3 个答案:

答案 0 :(得分:1)

我认为如果我改变一些条款可能会有所帮助,以便更好地解释我猜的是什么。

如果您有一页内存,我们可以说一个页面大小为8k。这是内存管理器分配的最小大小。

您有10个请求,每个请求100个字节,因此页面上的不同位置有1000个字节。

计数器将是10,但是,您如何知道实际释放或已经分配的内容,因为10个请求可能不是连续的,因为可能已经释放了其他请求。

所以,我们有10条忙碌的记录。

现在,您需要在答题纸中提出自己对问题的答案,但希望通过查看示例可能会更简单。

答案 1 :(得分:0)

“阻止”最有可能是basic block

我不熟悉“忙碌记录”一词;最有可能的是,它指的是变量的一些数据流分析结果(即变量可能被认为是“忙”)。有几个定义似乎有道理:

  1. 如果变量保持一个值(即已经“写入”),也可以被认为是“忙”,这个值也将被“读取”(意味着你不能轻易地消除变量)
  2. 如果变量“经常”使用(比其他变量更常见),则变量可能被视为“忙”,这意味着您应该尝试将其分配给寄存器。
  3. 但是,您应该真正了解该课程在课程中的定义。

    然后,计数器将根据基本块计算繁忙的变量数。为什么该计数器在某些处理后可能变为0还不清楚 - 很可能,“忙碌”在你的课程中还有其他意义。

答案 2 :(得分:0)

  1. 块是?经理将内存空间划分为块。一个或多个块由存储区单元组成,该存储区单元可用于由用户连续访问。如果需要更多内存,管理器将在该内存区域添加额外的块。而经理总是试图给用户提供连续的块。

  2. 柜台呢?对于特定块,它可以由不同用户使用,即,存储区域由多个用户共享。

  3. 忙碌的记录是?计数器值存储在“counter”上面。

  4. 例如:

    struct block {
        struct block *next;
        long counter; //@< the busy record
    };
    
    EDIT: changing "area" to "user"
    struct user {
        struct block *head;
        ...
    };
    

    编辑:回答问题“为什么计数器不足以阻止?” 将块从“空闲块列表”移动到“分配块列表”时需要更多信息,反之亦然,例如,用于快速定位列表中的位置的顺序。虽然我只想到这一点。