用于控制C中任务的内存的程序

时间:2010-10-10 15:46:32

标签: c memory-management

我有一个要解决的任务,这有​​点神秘。任务是在C中创建一个处理文本消息的程序,该程序应该模拟一个具有少量内存的系统,系统应该只能容纳最多X个字符的X消息,每个字符需要1个字节(ASCII) 。要管理消息,我应该创建一个保存在主存储器中的系统(以模拟内存有限的系统)。程序启动时,程序应为消息的所有信息分配一个内存区域。


这在任务中称为元数据结构:

用于存储的内存区域在内存中连续存储,但划分为32字节数据块,系统中的数据块数量应限制为512.

任务还说我应该创建X号码数据块,X依赖于系统设置包含的值X号码消息。

我相信我需要创建一个类似环形缓冲区的结构来保存每条消息(数据块?)。


这称为数据块的位图:

为了跟踪空闲和忙碌的女巫数据块,我必须实现一个位图,其中我有1但是对于每个数据块。位值为0(忙)/ 1(空闲)。当我想添加消息时,该位图应该用于查找空闲数据块,当系统删除或创建消息的数据块时,位图应该是最新的。

该系统的分配内存应分为3个块/区域,1个用于元数据结构,1个用于每个数据块的位图,1个用于数据块。


我需要大声提供有关解决方案的帮助以及如何在C中解决这个问题。 感谢

1 个答案:

答案 0 :(得分:2)

在程序开头malloc一个大块。返回指针是它开始的地方,你知道你要求的块有多大,所以你知道它的结束位置。

那是你的记忆库。

编写一个使用商店(仅限商店)的分配器和解除分配器,并从程序的其余部分调用他们,而不是调用mallocfree ...


这个任务也可以用一个庞大的数组来完成,并使用数组偏移作为指针等价物,但这在c中会很愚蠢。我只提到它,因为我在fortran中使用了一种在Fortran中构建的方法多年来在一个名为PAW的主要粒子物理软件中。


关于位图的

您的分配器必须始终知道商店的哪些部分正在使用,哪些部分未使用。这是它能够可靠地为您提供当前未使用的块的唯一方法,对吧?维护位图是一种方法。

为什么这样好?想象一下你已经使用了这段记忆了一段时间。在该空间中分配了许多对象,并且一些对象已被释放。可用空间不再是连续的,而是相当零散。

突然你需要分配一个 big 对象。

你在哪里可以找到大量的连续空闲内存?扫描位图比走复杂的数据结构要快。