首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计数内存块

计数内存块
EN

Stack Overflow用户
提问于 2009-10-17 23:10:16
回答 3查看 278关注 0票数 0

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

据称,将块返回到标准内存管理器将需要大量的管理。为什么每个块都有一个计数器(它保存了该块的繁忙记录数),并且当它达到0时返回该块还不够呢?

它所指的上下文中提到了链接列表。

答题纸上的答案是:

如何找到从指向记录的指针开始的计数器,以及如何获得返回块的指针?

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

  1. 布洛克是?
  2. 柜台有吗?
  3. 一张繁忙的唱片是?

引用文档,提供在此计数阶段发生的情况的遍历。图表会有帮助的。

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-18 01:21:33

我认为,如果我改变一些条款,以更好地解释我猜是怎么回事,也许会有帮助。

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

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

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

所以,我们有10个繁忙的记录。

现在,你需要在答题纸上给出你自己的答案,但是,希望通过看一个例子,它可能会更简单。

票数 1
EN

Stack Overflow用户

发布于 2009-10-17 23:26:08

“块”最有可能是基本块

我不熟悉“繁忙记录”这个术语;它很可能是指一些变量的数据流分析结果(例如,变量可能被认为是“繁忙的”)。有几个定义似乎是可信的:

  1. 如果一个变量持有一个值(即“已写入”),它也将被“读取”(这意味着您无法轻易消除该变量),则它可能被视为“繁忙”。
  2. 如果使用“经常”(比其他变量更频繁),变量可能会被视为“繁忙”,这意味着您应该尝试将它分配到寄存器中。

但是,您应该真正了解这个术语是如何在您的课程中定义的。

然后,计数器将计数,每个基本块,变量的数目是繁忙的。为什么在一些处理之后计数器可能变成0?很可能,“忙碌”在您的课程中还有另一个含义。

票数 0
EN

Stack Overflow用户

发布于 2009-10-18 07:56:53

  1. 布洛克是?经理把内存空间分成了几个块。一个或多个块由可用于用户连续访问的存储器区域单元组成。如果需要更多内存,管理器将向该内存区域添加额外的块。而经理总是试图给用户提供连续的块。
  2. 柜台有吗?对于特定的块,它可以由不同的用户使用,也就是说,内存区域由多个用户共享。
  3. 一张繁忙的唱片是?存储在上面的“计数器”中的计数器值。

例如:

代码语言:javascript
运行
复制
struct block {
    struct block *next;
    long counter; //@< the busy record
};

EDIT: changing "area" to "user"
struct user {
    struct block *head;
    ...
};

编辑:回答以下问题:“为什么一个柜台对一个街区来说不够?”当将块从“空闲块列表”移动到“分配块列表”时需要更多信息,反之亦然,例如用于快速定位列表中某个位置的顺序。而我只是猜到这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1583466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档