重新分配后C会重用内存吗?

时间:2012-01-25 17:45:29

标签: c memory-management free

我正在编写一个C程序来计算粒子的路径(类似于三体问题)。在我的代码中,我有typedef'ed结构来表示粒子,以及一组向量来表示粒子的速度,加速度和位置。由于这是一个迭代解决方案,我必须重新计算所有这些(并因此malloc一个新的向量)数千次,并在每次迭代中将它们重新分配给父结构,如下所示:

while(collisionCheck(particle, mass0, mass1) == 0)
{
    particle-> velocity = recalculateVelocity(particle);
}

我担心C将如何处理孤立的结构,我应该像这样释放旧的结构吗?

while(collisionCheck(particle, mass0, mass1) == 0)
{
    free(particle-> velocity);
    particle-> velocity = recalculateVelocity(particle);
}

或者C垃圾会收集孤儿并自动重复使用内存空间吗?

3 个答案:

答案 0 :(得分:4)

嗯...... C 没有任何垃圾收集。

对于malloc的每个记忆区域,您自己负责free

但是,一旦记忆已经free d,它通常会被重复使用。

答案 1 :(得分:4)

如果它是一个指针,particle->velocity实际上只创建一个新的结构(或其他)并返回指向它的指针,则只有空闲recalculateVelocity()

如果您未使用malloc(),则不得使用free()。如果您使用了malloc(),则必须使用free()。这里唯一的例外是realloc()

答案 2 :(得分:3)

C不是垃圾回收,所以它垃圾收集任何东西。为了释放内存,在您使用free()分配后,必须使用malloc()功能。

所以答案是,如果particle->velocity是您之前使用malloc()分配的空间的唯一指针,则必须在分配给该指针之前释放free()的内存,因为这意味着你不再有任何指向该空间的指针,那就是memory leak