为什么free()将东西留在内存中?

时间:2019-05-09 21:26:33

标签: c malloc free realloc

我试图了解malloc-realloc和free在C语言中的工作原理。 我已经找到this page了,我能够理解如何分配块,但是我不能完全确定free函数的工作原理,因为在我的测试程序中,调用free之后它将一些数据保留在内存中。

这就是记忆的样子...

const MarkerPin = L.CircleMarker.extend({
    _updatePath: function() {
        this._renderer._updateMarkerPin(this)
    },
    _containsPoint: function(p) {
        let r = this._radius

        let insideCircle =
            p.add([0, r * 2]).distanceTo(this._point) <= r + this._clickTolerance()

        let a = this._point,
            b = a.subtract([0.58 * r, r]),
            c = a.subtract([-0.58 * r, r])

        let insideTriangle = true

        let ap_x = p.x - a.x
        let ap_y = p.y - a.y

        let p_ab = (b.x - a.x) * ap_y - (b.y - a.y) * ap_x > 0
        let p_ac = (c.x - a.x) * ap_y - (c.y - a.y) * ap_x > 0
        let p_bc = (c.x - b.x) * (p.y - b.y) - (c.y - b.y) * (p.x - b.x) > 0

        if (p_ac === p_ab) {
            insideTriangle = false
        }
        if (p_bc !== p_ab) {
            insideTriangle = false
        }
        return insideTriangle || insideCircle
    },
})

...以及免费功能之后:

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

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

Q是malloc返回的地址。

谢谢!

1 个答案:

答案 0 :(得分:2)

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

如何使用内存以及是否使用内存是特定于实现的。一个实现可能以一种方式使用释放的内存,而另一种实现则以另一种方式使用它,而第三种实现可能至少在某些大小的块上根本不使用释放的内存。例如,某个固定大小的块可能会被其他位置维护的位图跟踪,可能对不同的固定大小使用不同的位图。