我想解码成YUV帧的MP4视频。我想为每帧解码分配内存,如果我连续分配内存并释放内存,是否可以。这样做是否存在问题(即使用malloc
和free
来争用分配和释放内存)?malloc和免费使用
1
A
回答
5
我会更好地分配一次足够的缓冲区,并重新使用相同的缓冲区。除了某些性能下降外,重复的malloc-free不会造成任何问题。
4
从技术上讲,只要您不尝试访问已释放的内存,就完全没有问题。
另一方面,反复进行所有这些调用会产生一个开销,您可以(也应该)通过提前分配足够的内存来避免这种开销,然后在最后释放所有这些开销。
重复分配/释放的方法应该只在内存非常紧张的情况下使用,否则,根据需要保留一大块内存并分配一部分内存。或者,如果可能的话,重复使用同一块内存。
更新:作为一个有帮助的注释中提到的@EricPostpischil(见下文),malloc的是库通话,而不是一个系统调用时,当前的堆被耗尽,因为这只会发生。欲了解更多信息,请参阅this explanation
0
不断mallocing和释放是不会破坏该程序,但它会导致很多性能问题,特别是因为你说你会在每一帧。通常会导致性能下降,并且释放。
你可以做的只是malloc内存一次,然后为每个帧重新使用相同的分配。如果您在读取下一帧之前完成所需内容后不需要存储内存,则没有任何问题。
1
如果您分配的对象具有相同的大小,则应该不会有太大的性能下降。如有疑问,请测量它。
正确地跟踪分配的内存通常不是微不足道的,因此分配一次缓冲区并在整个程序中使用它可能更容易。但是这里的主要规则应该是使用与你的程序逻辑相对应的内容,是最容易阅读和维护的。
相关问题
- 1. 使用malloc()和免费()
- 2. C malloc和免费
- 3. 嵌入式RTOS和使用malloc /免费
- 4. Malloc Realloc免费
- 5. 结构和malloc()/免费()
- 6. Malloc /免费误区
- 7. 崩溃EXC_BAD_ACCESS使用malloc /免费
- 8. 使用malloc /免费模拟新/删除
- 9. Emscripten malloc和免费跨JS和C++
- 10. malloc和免费构造函数和destrtructor
- 11. 正确使用malloc和免费使用C++指针
- 12. C,malloc,免费和自动检查
- 13. C malloc和免费不工作
- 14. C编程 - Malloc /免费
- 15. 基本的malloc /免费
- 16. 新,删除,malloc,免费
- 17. malloc的,免费的,分段错误
- 18. Malloc /免费自己的执行
- 19. malloc成功后失败,没有免费
- 20. Windows内核中的免费/ malloc功能
- 21. Linux堆结构和与malloc()和免费()行为
- 22. 双免费或腐败(!prev)在C,使用线程,malloc
- 23. AIX进程内存使用malloc免费通话中环
- 24. 包装malloc和免费,给分配统计?
- 25. C编程:malloc和循环内部免费
- 26. C malloc和免费函数的奇怪行为
- 27. 了解malloc和指针增量与免费
- 28. 细化我做malloc和免费的方式
- 29. 崩溃与malloc和Android本机代码免费
- 30. Malloc和免费的多个数组在组装
如果这样做,您可能会遇到性能问题......否则它在技术上是正确的。 – shan