这是编译器设计课程的作业问题。我只需要解释问题的某些部分。
声称将块返回到标准内存管理器 需要很多管理。为什么 单身是不够的 每个块的计数器,它持有 该块的忙记录数, 并在它时返回块 达到0?
它所指的上下文谈论链表。
答题纸上的答案说明:
你如何找到这个计数器开始 从指针到记录以及如何 你得到了指针吗? 回到街区?
来自基于C的背景。有人可以向我解释一下:
对文件的引用,该文件提供了在计数阶段发生的事情的演练。图表会有所帮助。
感谢。
答案 0 :(得分:1)
我认为如果我改变一些条款可能会有所帮助,以便更好地解释我猜的是什么。
如果您有一页内存,我们可以说一个页面大小为8k。这是内存管理器分配的最小大小。
您有10个请求,每个请求100个字节,因此页面上的不同位置有1000个字节。
计数器将是10,但是,您如何知道实际释放或已经分配的内容,因为10个请求可能不是连续的,因为可能已经释放了其他请求。
所以,我们有10条忙碌的记录。
现在,您需要在答题纸中提出自己对问题的答案,但希望通过查看示例可能会更简单。
答案 1 :(得分:0)
“阻止”最有可能是basic block。
我不熟悉“忙碌记录”一词;最有可能的是,它指的是变量的一些数据流分析结果(即变量可能被认为是“忙”)。有几个定义似乎有道理:
但是,您应该真正了解该课程在课程中的定义。
然后,计数器将根据基本块计算繁忙的变量数。为什么该计数器在某些处理后可能变为0还不清楚 - 很可能,“忙碌”在你的课程中还有其他意义。
答案 2 :(得分:0)
块是?经理将内存空间划分为块。一个或多个块由存储区单元组成,该存储区单元可用于由用户连续访问。如果需要更多内存,管理器将在该内存区域添加额外的块。而经理总是试图给用户提供连续的块。
柜台呢?对于特定块,它可以由不同用户使用,即,存储区域由多个用户共享。
忙碌的记录是?计数器值存储在“counter”上面。
例如:
struct block {
struct block *next;
long counter; //@< the busy record
};
EDIT: changing "area" to "user"
struct user {
struct block *head;
...
};
编辑:回答问题“为什么计数器不足以阻止?” 将块从“空闲块列表”移动到“分配块列表”时需要更多信息,反之亦然,例如,用于快速定位列表中的位置的顺序。虽然我只想到这一点。