将链表实现与malloc函数分开

时间:2012-07-16 05:38:16

标签: c memory-management

我被告知要设计一个链表模块,其中链表功能都将在一个头文件中,但内存分配(malloc)不会发生在那些模块中。 内存分配只应在main函数中进行。我无法弄清楚。帮助我。

3 个答案:

答案 0 :(得分:0)

main中,您应该一次性分配足够大量的内存(内存池)。现在,在您的模块中,您需要从此池中管理(分配和释放)内存块,而不必担心malloc

如果你不了解内存池,请阅读 - http://en.wikipedia.org/wiki/Memory_pool

然而,您需要解决碎片问题。在下面的步骤中,我使用位数组来标记空闲和分配的节点。

实施例 -

  • main中,您分配50 * sizeof(节点)(50取决于应用程序)
  • 现在,您将已分配池的指针传递给您的函数。
  • 保留一个计数器,计算分配的节点数,将其初始化为0
  • 还保留一个大小为50的位数组,初始化为0(全部空闲)
  • 分配时,检查溢出,迭代位数组,找到第一个空闲节点。如果 j 位为0,则将新节点的地址作为Base + j (* sizeof node)传递,并递增计数器。将 j 位设置为1。
  • 解除分配时,只需递减计数器,并将相应的位设置为0。

HTH

答案 1 :(得分:0)

已经实现的

:查看<sys/queue.h>这是一个仅标题链接列表。

答案 2 :(得分:0)

您可以将此作为结构数组执行,并通过数组索引进行链接。然后可以在main函数中分配该数组。请注意,您必须跟踪列表中的条目数,因为列表将限制为您分配的条目数。