C - 使用链接列表的自适应动态内存?

时间:2015-04-20 20:47:50

标签: c memory linked-list dynamic-memory-allocation memory-efficient

对于链接列表,它似乎是最有效的'节点是适合当前背景,情况或需要的节点。

在生成算法中,内存需求是可变的,因此我需要的是一个能够接收可用内存量并计算数学高效节点配置的函数。

现在我通常会尝试解决这个问题,但事实是,C已经存在了很长时间,我保证已经完成了。

问题:什么是最有效的已知动态分配算法?

通过动态分配算法',我的意思是基本上是一个可以接受“内存可用”输入的函数,并使用数学公式将其分解为数学上最有效的链表节点配置。

- Edit-- 解释'链表节点配置'假设生成程序生成struct mystruct类型int, char, float。现在假设在主函数的一个循环之后,可用内存量已经改变,mystruct对象的数量也改变了。让我们假设程序需要再生成2个mystruct对象。从数学上讲,应该有一种最有效的方法,使用链表节点在内存中排列这两个对象。不太复杂。现在假设结构类型是可变的,它们有100个甚至1000个?确保所有这些数据都被安排为最小化内存使用是非常复杂的,但是,我确信有一个功能代表最知名的解决方案。它是什么/我在哪里?

- 编辑 - 编译器使用的这个公式(无论你参考哪个)?如果不是,为什么不呢?

- 编辑 - 如果没有这样的公式,请解释为什么不可能?

1 个答案:

答案 0 :(得分:1)

如果你考虑内存分配和碎片:没有单一的最佳方法。实际的重新发现取决于各个方面。例如,存储器保护,分配/解除分配的运行时限制以及 - 是 - 碎片等问题。例如,具有重定位/压缩的完整垃圾收集器确实提供了最佳的内存布局(因为所有块都可以压缩到没有间隙的单个空间),但代价是必须知道每个块的每个指针和非常差的运行时间行为。

至于编译器:他们的分配工作非常简单。他们只需要分配静态对象;问题是在运行时完成的动态内存管理。