-1

这可能是一个非常基本的问题,但我认为重要的是我知道答案。我有一个非常长的循环,我只在开始时使用某个指针。在循环结束之外分配所需的内存并在循环结束时释放它,或者在循环开始时重复分配内存并在完成指针后释放它会更好吗?我认为后者是两者中较好的一个,但我不知道每次分配内存的能力有多大,所以我想在继续之前进行检查。什么时候应该释放C中循环中使用的内存?

+3

这取决于。关于你的代码在做什么。只有你可以看到它。 – 2014-10-03 20:41:26

+1

如果您可以轻松地重新使用缓冲区,则仅执行一次分配会更好。但是,我们需要一个代码示例。 – 2014-10-03 20:42:11

回答

0

这完全取决于您的性能瓶颈在哪里。

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

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

通常,当你编写C代码时,两个语句都是真实的。所以,这是一种折衷:你必须检查损失对于你的特殊情况来说成本较低。

希望有所帮助。

+1

太好了,那正是我需要知道的。谢谢! – ping 2014-10-03 20:48:34

0

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

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

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

如果没有,请在需要记忆之前进行分配,然后尽快释放。

0

如果分配只是严格用于循环的本地,那么我将从分配/释放应该在循环内发生的假设开始。这是一个类似的概念,即只有在循环体内使用的变量才应该在循环中声明为局部变量。

但是,这只是一个起点。有几个有效的理由让循环外的分配和循环完成时释放。其中一些原因可能是:

  • 性能 - alloc/dealloc很贵。来自重复的alloc/dealloc操作的转移是将这些移动到循环外的有效理由。对于许多循环来说,这可能无关紧要,但它肯定可能是一个有效的关注点。

  • 正确性 - 如果循环可能会提前终止,那么最好将释放移到外部,这可能更容易计算循环可以退出的所有方式。请注意,在C++中,RAII支持可能会鼓励相反的策略。

相关问题