泡泡网 "Be fresh and eager every morning, and tired and satisfied every night." --Kent Beck

LAB05: Memory Management

实验基本要求:

  1. 本实验分两次实验课完成,可以在任何平台下用标准C编程。
  2. 定义一个数组作为“内存”,模拟实现操作系统中的内存分配算法(First fit、Next fit、Best fit和Worst fit中的至少一种),实现下列两个“系统调用”:
    void* GetBlock(unsigned int size);
    int FreeBlock(void* pBlock);
  3. 调用者应能使用GetBlock()所返回的指针;
  4. 这两个函数应具有复用性,可直接包装为函数库给任意程序使用;
  5. 要有demo程序来测试和演示它们的功能。

实验内容:

  1. 在满足上述基本要求的基础上,你可以自己编写demo程序,也可以使用下面提供的框架;
  2. memmgr.c(for win & linux)是框架代码,你只需要按照注释完成下列三个函数
    void* GetBlock(unsigned int size);
    int FreeBlock(void* pBlock);
    int IsFree(int unit);
    可能需要自定义一些辅助性质的结构、函数和全局变量等。也可以增加初始化一类的函数供main()调用。
    其中的数组char memory[MEM_SIZE]就是你要处理的“内存”。
    主程序可以用来测试你的算法。它显示整个数组的占用情况,根据你的需要随时申请、释放内存。

实验报告内容:

  1. 请用文字和图表来描述你采用的算法和数据结构及实现方法;
  2. 把有注释的代码附到实验报告后。

下载:

  1. 实验报告模板(doc
  2. 示例程序 for win32 & linux

评分标准:

  1. 对课堂表现分来说,能简单地申请和释放内存即算完成实验。
  2. 实验报告中源代码的分通过学生演示程序,当堂给出,标准如下:
    • 代码中有精当的注释(1分)
    • 代码风格良好(1分)
    • 实现了内存申请功能(2分)
    • 实现了内存释放功能(2分)
    • 实现了IsFree()(2分)
    • 实现了邻近空闲内存的拼接功能(1分)
    • 不会发生内存的重叠分配(1分)
    • 不会超出内存的边界进行分配(1分)
    • 当不能进行分配或回收时,返回错误(1分)
  3. 指导教师可以针对代码提出问题,如学生不能准确作答,直接认定为抄袭

黑ICP备05004784号