泡泡网 "Be fresh and eager every morning, and tired and satisfied every night." --Kent Beck
LAB05: Memory Management
实验基本要求:
- 本实验分两次实验课完成,可以在任何平台下用标准C编程。
- 定义一个数组作为“内存”,模拟实现操作系统中的内存分配算法(First fit、Next fit、Best fit和Worst fit中的至少一种),实现下列两个“系统调用”:
void* GetBlock(unsigned int size);
int FreeBlock(void* pBlock);
- 调用者应能使用GetBlock()所返回的指针;
- 这两个函数应具有复用性,可直接包装为函数库给任意程序使用;
- 要有demo程序来测试和演示它们的功能。
实验内容:
- 在满足上述基本要求的基础上,你可以自己编写demo程序,也可以使用下面提供的框架;
- memmgr.c(for win & linux)是框架代码,你只需要按照注释完成下列三个函数
void* GetBlock(unsigned int size);
int FreeBlock(void* pBlock);
int IsFree(int unit);
可能需要自定义一些辅助性质的结构、函数和全局变量等。也可以增加初始化一类的函数供main()调用。
其中的数组char memory[MEM_SIZE]就是你要处理的“内存”。
主程序可以用来测试你的算法。它显示整个数组的占用情况,根据你的需要随时申请、释放内存。
实验报告内容:
- 请用文字和图表来描述你采用的算法和数据结构及实现方法;
- 把有注释的代码附到实验报告后。
下载:
- 实验报告模板(doc)
- 示例程序 for win32 & linux
评分标准:
- 对课堂表现分来说,能简单地申请和释放内存即算完成实验。
- 实验报告中源代码的分通过学生演示程序,当堂给出,标准如下:
- 代码中有精当的注释(1分)
- 代码风格良好(1分)
- 实现了内存申请功能(2分)
- 实现了内存释放功能(2分)
- 实现了IsFree()(2分)
- 实现了邻近空闲内存的拼接功能(1分)
- 不会发生内存的重叠分配(1分)
- 不会超出内存的边界进行分配(1分)
- 当不能进行分配或回收时,返回错误(1分)
- 指导教师可以针对代码提出问题,如学生不能准确作答,直接认定为抄袭。
黑ICP备05004784号