【问题标题】:How to implement memory simulation in C?如何在 C 中实现内存模拟?
【发布时间】:2011-11-13 03:17:29
【问题描述】:

基本上我需要有两个列表,其中一个通过存储起点和每个孔的大小来保存空内存孔的列表。另一个,保留有关各种进程的信息(虽然没有实际的进程数据,而只有 id 和起始位置和大小)。

所以,我知道我需要有两个结构,每个结构都定义了“洞”和“过程”。我需要有两个列表来存储这些对象。

我不明白的是如何“初始化内存”。比如用户要初始化(5000字节),那么initialize方法对这两个列表应该怎么做呢?

【问题讨论】:

  • 这已经在 libc 中用malloc()free() 等东西完成了。看看它是如何实现内存分配的,因为我知道有某种数据结构在使用中管理分配的内存“块”。但是,我相信这可能更多地与虚拟内存的完成方式相关,这更接近于操作系统级别的功能。
  • 第一个列表听起来像一个空闲列表en.wikipedia.org/wiki/Free_list
  • @Michael 这听起来像是家庭作业,所以“stdlib 已经有了它”不是一个选项。
  • @Inerdia 所以我们不应该鼓励他们自学吗?
  • @antonpug:如果这实际上是一个 uni 作业,你应该使用 homework 标签。

标签: c data-structures


【解决方案1】:

您只需清空进程列表(因为没有分配内存)并创建一个从地址 0 到地址 4999 的空洞(因为这些地址是空的)。

【讨论】:

    【解决方案2】:

    只需实现具有 malloc() 和 free() 等效项的常规内存管理器,并将其扩展为支持额外的控制数据(例如您的进程 ID)。或者分配一大块内存,将其划分为较小的每个进程块,并在这些块内实现内存管理。例如,查看Doug Lea's memory allocator

    一般参见Wikipedia on Memory Management。关注链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 2014-05-09
      • 2011-01-31
      相关资源
      最近更新 更多