c - 循环调用realloc的缺点

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

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

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

是不是内存管理器的问题?谁能给我解释一下?

最佳答案

  1. 当您多次分配/取消分配内存时,可能会在内存中产生碎片,您可能无法获得大的连续内存块。
  2. 当您执行重新分配时,可能需要一些额外的内存来短期移动数据。

如果您的算法不需要连续内存或可以更改为在非连续内存上工作,请考虑使用数组链表(C++ 的某些链接 std::dequeue),这将避免复制数据,您的代码可能不遭受OOM。如果您知道数组的最坏情况内存需求,最好保留从一开始就分配的内存本身,因为与 realloc 相比,它可以避免分配和数据移动的成本。 .

关于c - 循环调用realloc的缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30976295/

相关文章:

c - 如果函数指针与数组地址一起传递会发生什么

c - 当 C 中的静态分配没有足够的内存时会发生什么?

c++ - 在预分配内存中创建对象

postgresql - 在简单的读写上激发 OOM

java - 无法解决eclipse中的 "Java heap space"错误

android - 是否可以将位图切成小块而不将整个东西加载到内存中?

c++ - 用 C 或 C++ 扩展 Python 有什么好处?

c - 如何为 EVP_CIPHER 设置零填充?

memory-management - Lazarus Pascal - 如何在运行时删除按钮

c - 程序的输出随 printf() 语句而变化