当我随机使用 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.
无论如何,您有两种选择:
- 完全信任库内存管理功能。
- 如果您真的有信心,请编写自己的内存管理器。
如果我是你,我肯定会相信现有的功能,因为现代实现非常智能。
关于c - 内存碎片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37186421/