我试图在 Windows 7 上用 C
实现一些数学算法,我需要反复增加数组的大小。
有时会失败,因为realloc
无法分配内存。
但是如果我一开始就一次分配大量内存,它就可以正常工作。
是不是内存管理器的问题?谁能给我解释一下?
最佳答案
- 当您多次分配/取消分配内存时,可能会在内存中产生碎片,您可能无法获得大的连续内存块。
- 当您执行重新分配时,可能需要一些额外的内存来短期移动数据。
如果您的算法不需要连续内存或可以更改为在非连续内存上工作,请考虑使用数组链表(C++ 的某些链接 std::dequeue),这将避免复制数据,您的代码可能不遭受OOM。如果您知道数组的最坏情况内存需求,最好保留从一开始就分配的内存本身,因为与 realloc
相比,它可以避免分配和数据移动的成本。 .
关于c - 循环调用realloc的缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30976295/