在C中创建单独的堆

时间:2019-06-10 09:27:42

标签: c malloc heap dynamic-memory-allocation

我正在开发一个执行大量动态内存分配的函数,但是,如果该函数超过时间阈值,则将触发计时器。因此,我们需要在启动此功能时释放所有分配的内存。

当我们输入函数时,我们使用第三方工具来创建堆池。因此,任何动态内存分配都将来自此堆池。 如果计时器触发,我们将释放该堆池,并且代码将继续在该堆池之前工作(就像一堆池)。

由于成本原因,我们需要停止使用此第三方工具。

有人对此解决方案有想法来代替此第三方工具吗?

注意:它不是多线程系统。

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以从堆中获取大内存块,并编写自己的分配器和取消分配器。如果计时器触发,您可以释放整个块。

当然,这需要深入研究malloc和free的工作方式。而且您将需要知道如何以及在内存头中存储哪些信息。

答案 1 :(得分:1)

您可以使用指针集合,其中将所有指针存储到函数执行期间分配的内存,并且当时间结束时,您将遍历并释放所有指针。 (您可以将任何指针存储为void *,这样是可能的)。这样做的好处是,您不必手动编码malloc和free。如果您想像使用的工具一样工作,可以分配一大块内存,然后实现自己的malloc和free版本,并释放指向块“空闲”部分的指针。这样做的好处是,您现在在离开函数时只需要做一个免费的操作,但是要以更复杂的实现为代价(考虑到内存可能用完了,必须手动避免碎片化)。我建议您第一种方法。