使用malloc和free

时间:2012-08-27 05:33:39

标签: c malloc

我正在尝试将mp4视频解码为YUV帧。我想为每个要解码的帧分配内存,如果我不断分配内存并释放它就可以了。这样做是否有任何问题(即使用mallocfree有争议地分配和释放内存?)

4 个答案:

答案 0 :(得分:5)

我最好分配足够的缓冲区一次并重用相同的缓冲区。除了一些性能损失之外,重复的malloc-free不会造成任何问题。

答案 1 :(得分:4)

从技术上讲,只要您不尝试访问已经释放的内存,就没有任何问题。

另一方面,重复进行所有这些调用会产生一个开销,你可以(并且应该)通过提前分配足够的内存来避免,然后在结束时释放所有内存。

重复分配/释放的方法实际上只应在非常严格的内存限制下使用,否则,保留一大块内存并根据需要自行分配部分内存。或者,如果可能,重用相同的内存块。

更新:正如@EricPostpischil在一篇有用的评论中所提到的(见下文),malloc是一个调用,而不是只在当前堆耗尽时才会发生的系统调用。有关详细信息,请参阅this explanation

答案 2 :(得分:1)

如果您分配的对象具有相同的大小,则应该没有太大的性能影响。如有疑问,请进行衡量。

正确跟踪分配的内存通常并不容易,因此分配缓冲区一次并在整个程序中使用它可能更容易。但这里的主要规则应该是使用与程序逻辑相对应的内容,最容易阅读和维护。

答案 3 :(得分:0)

不断的mallocing和freeing不会破坏程序,但它会导致很多性能问题,特别是因为你说你将会每一帧都这样做。对其进行拆分和释放通常会导致性能显着下降。

你能做的只是将内存一次性化,然后为每一帧重新使用相同的分配。如果在读取下一帧之前完成所需的帧后不需要存储内存,则没有任何问题。