在循环中调用realloc的缺点
我试图在Windows 7上用C
实现一些数学算法,我需要反复增加我的数组的大小。
有时它会失败,因为realloc
无法分配内存。 但是如果我在开始时一次分配大量内存它就可以正常工作。
这是内存管理器的问题吗? 有人能解释一下吗?
- 当您多次分配/释放内存时,它可能会在内存中创建碎片,并且您可能无法获得大量连续的内存块。
- 当您执行realloc时, 可能需要一段额外的内存才能在短时间内移动数据。
如果您的算法不需要连续内存或者可以更改为在非连续内存上工作,请考虑使用数组的链接列表(C ++的Something链接std :: dequeue),这将避免复制数据,并且您的代码可能不会受到OOM的影响。 如果您知道arrays的最坏情况内存要求,最好保留从开头本身分配的内存,因为与realloc
相比,它将避免分配和数据移动的成本。
我希望你的算法能够快速运行,尽量预先做好所有的内存分配。 内存分配是一种无限制的操作,会破坏您的性能。 因此,推测一个合理的最坏情况,并为此分配足够的。 如果你确实需要稍后重新分配,但不要继续这样做。