在循环中调用realloc的缺点

时间:2015-06-22 09:22:33

标签: c memory-management out-of-memory realloc

我正在尝试在Windows 7上的C中实现一些数学算法,我需要反复增加数组的大小。

有时会失败,因为realloc无法分配内存。 但是如果我在开始时一次分配大量内存它就可以正常工作。

内存管理器有问题吗?有人可以解释一下吗?

2 个答案:

答案 0 :(得分:1)

  1. 当您多次分配/释放内存时,它可能会在内存中造成碎片,并且您可能无法获得大量连续的内存。
  2. 当你进行realloc时,短时间内需要一些额外的内存 来移动数据。
  3. 如果您的算法不需要连续内存或者可以更改为在非连续内存上工作,请考虑使用数组的链接列表(C ++的Something链接std :: dequeue)以避免复制数据,并且您的代码可能没有遭受OOM。如果您知道阵列的最坏情况内存要求,最好保留从开头本身分配的内存,因为与realloc相比,它将避免分配和数据移动的成本。

答案 1 :(得分:0)

我希望你的算法能够快速运行,尽量预先做好所有的内存分配。内存分配是一个无限制的操作,会破坏你的性能。因此,推测一个合理的最坏情况,并为此分配足够的。如果你确实需要稍后重新分配,但不要连续重新分配。