我应该何时释放C中循环中使用的内存?

时间:2014-10-03 20:39:51

标签: c memory-management memory-leaks dynamic-memory-allocation

这可能是一个非常基本的问题,但我认为重要的是我知道答案。我有一个非常长的for循环,其中我只在开头附近使用某个指针。最好是在循环外部分配所需的内存并在循环结束时释放它,或者在循环开始时重复分配内存并在我完成指针后立即释放它?我假设后两种情况比较好,但我真的不知道每次分配内存有多大的功率,所以我想在继续之前检查。

3 个答案:

答案 0 :(得分:0)

这恰好取决于你的性能瓶颈在哪里。

如果你需要它尽可能快,并且每一毫秒都很重要,那么你最好的注意就是不要每次都分配它。

然而,它花费了记忆力。如果内存对你来说是一个巨大的问题,并且分配的每个字节都很痛苦,那么你应该尽快释放内存 - 从而在需要时准确分配内存,如果需要,可以多次分配。

通常,当您编写C代码时,两个语句都是正确的。所以,这是一个权衡:你需要检查损失对你的特定情况来说成本更低。

希望有所帮助。

答案 1 :(得分:0)

没有正确答案,这实际上是一个非常复杂的问题。

这取决于很多东西,分配大小,内存碎片,优化......

如果你有足够的内存,在循环外分配和释​​放(因为关于速度,动态分配是坏的)

如果没有,请在您需要记忆之前尽快分配并尽快免费。

答案 2 :(得分:0)

如果分配仅在循环的本地严格使用,那么我将假设分配/解除分配应该在循环内发生。这是一个类似的概念,即只在循环体内使用的变量应该被声明为循环的局部。

但是,这只是一个起点。在循环外部进行分配以及在循环完成时取消分配有几个有效的原因。其中一些原因可能是:

  • 性能 - alloc / dealloc很贵。从重复的alloc / dealloc操作中流失是将它们移出循环的正当理由。对于许多循环而言,这可能并不重要,但它绝对可能是一个有效的问题。

  • 正确性 - 如果循环可能提前终止,那么最好将解除分配移到可能更容易考虑循环可以退出的所有方式的位置。请注意,在C ++中,RAII支持可能会鼓励相反的策略。