c - 内存碎片

标签 c memory malloc memory-fragmentation

当我随机使用 malloc()s 和 free()s 时,嵌套和大小不同,在某些时候内存会碎片化,因为这些操作会留下一个后面的小内存区域的大列表是不连续的,因此不能分配为更大的一 block 。

关于这个的几个问题:

  • 如果经常这样做以致内存被迫碎片化,然后 all 这些内存区域是 free()d,我可以假设这些空闲区域是否连接回其原始的连续大小?

  • 当我总是对同一内存执行 malloc() 后跟 free() 并且从不嵌套这些调用时,在这种情况下内存是否碎片化当分配/释放的大小总是不同时也是如此?

最佳答案

不,没有保证。根据 N1570,7.22.3 Memory management functions :

The order and contiguity of storage allocated by successive calls to the aligned_alloc, calloc, malloc, and realloc functions is unspecified.

无论如何,您有两种选择:

  1. 完全信任库内存管理功能。
  2. 如果您真的有信心,请编写自己的内存管理器。

如果我是你,我肯定会相信现有的功能,因为现代实现非常智能。

关于c - 内存碎片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37186421/

相关文章:

c - 理解inotify示例中的对齐语句

memory - 在 Clojure 中处理大量序列时,如何避免堆内存不足?

C 如何在变量输入中使用结构体和 malloc

C 无法输入 scanf

c++ - Linphone编译-配置: error: cannot run C compiled programs

python - 如何从 multiprocessing.queue 中的 Process 释放内存?

c - 指向C中参数中指针的指针

C - 传递分配的指针并在单独的函数中使用 realloc

c - 使用 gcc 生成 hex 文件

c - main 中的预处理命令