c - 为什么 free() 会在内存中留下东西?

标签 c malloc free realloc

我试图了解 malloc-realloc 和 free 在 C 中是如何深入工作的。 我找到了 this page并且我能够理解 block 是如何分配的,但是我不完全确定 free 函数是如何工作的,因为在我的测试程序中它在调用 free 之后在内存中留下了一些数据。

这是内存之前的样子......

33 0 0 0 0 0 0 0 *q=0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 49 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

...在 free 函数之后:

33 0 0 0 0 0 0 0 *q=112 132 178 223 255 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 49 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

我明白 33 是​​存储在 block 头中的 block 大小,但我不明白“q”后面的数字在释放内存时是什么意思。

Q 是 malloc 返回的地址。

谢谢!

最佳答案

您正在使用的内存管理软件将 free 释放的内存用于自己的目的。它需要数据来组织可供分配的内存块,使用 free 释放的内存是一种方便的方法。

如何使用内存以及是否使用内存是特定于实现的。一种实现可能以一种方式使用释放的内存,而另一种实现以另一种方式使用它,而第三种实现可能根本不使用释放的内存,至少对于某些大小的 block 是这样。例如,某个固定大小的 block 可能由在别处维护的位图跟踪,可能对不同的固定大小使用不同的位图。

关于c - 为什么 free() 会在内存中留下东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56067811/

相关文章:

c - ffmpeg.c 什么是 pts 和 dts ?这个代码块在 ffmpeg.c 中做了什么?

c - 在 Select 中阻止一个客户端而不阻止其他人

c - 动态创建自定义结构数组

c++ - 在 C++ 中为包含对象数组的对象数组释放内存的正确方法

c - 持久化malloc创建的内存块

c++ - 需要 C++ 解析器

c - 构建结构阵列问题

c - 如何访问动态 vector 的元素?

c - 分配给结构中的静态数组时堆缓冲区溢出

c - 高斯分布在 C 中帮助不大