我试图了解 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/