我正在尝试在Windows 7上的C
中实现一些数学算法,我需要反复增加数组的大小。
有时会失败,因为realloc
无法分配内存。
但是如果我在开始时一次分配大量内存它就可以正常工作。
内存管理器有问题吗?有人可以解释一下吗?
答案 0 :(得分:1)
如果您的算法不需要连续内存或者可以更改为在非连续内存上工作,请考虑使用数组的链接列表(C ++的Something链接std :: dequeue)以避免复制数据,并且您的代码可能没有遭受OOM。如果您知道阵列的最坏情况内存要求,最好保留从开头本身分配的内存,因为与realloc
相比,它将避免分配和数据移动的成本。
答案 1 :(得分:0)
我希望你的算法能够快速运行,尽量预先做好所有的内存分配。内存分配是一个无限制的操作,会破坏你的性能。因此,推测一个合理的最坏情况,并为此分配足够的。如果你确实需要稍后重新分配,但不要连续重新分配。