multithreading - 多线程视频解码器内存泄漏

标签 multithreading memory-leaks ffmpeg hardware-acceleration opengl-4

我的目的是创建一个相对简单的视频播放系统,用于我正在开发的大型程序中。视频解码器的相关代码是here .到目前为止,我能做的最好的事情是将内存泄漏缩小到这部分代码(或者更确切地说,我没有注意到在不使用视频时发生任何内存泄漏)。

这可能是一个非常广泛的问题,我如何不确定我遇到的问题的范围以及如何表达我的问题。

我想知道的是我错过了什么或做错了什么,导致了明显的内存泄漏(明显的意思是我可以看到内存使用量攀升至每分钟兆字节)。我已经尝试确保我所做的每个分配都与释放匹配。

编辑 1
这是在运行 MSYS2 (MinGW64) 的 Windows 10 机器上构建的

最佳答案

捕获泄漏的最佳方法是在编译器上使用内置的内存泄漏检查器,如果可以使用它进行编译,则比 valgrind 更好。

将此行添加到您的 makefile:

CXXFLAGS += -fno-omit-frame-pointer -fsanitize=address -ggdb3 -O0

如果您使用旧版本的 gcc(不支持内存清理器/检查器,请使用 clang)。

我所知道的是av_packet_unref如果不满足某些条件,可能无法按预期工作(您可以在 ffmpeg 源代码内部阅读更多内容,不记得它是头文件之一谈论这些的名称)。

编译后,让内存明显攀升,然后使用Ctrl+C退出。 Memory sanitizer 将自动转储分配内存(以后不释放)的函数/行。如果看不到源代码行号,请使用 addr2line工具。

希望有帮助。

关于multithreading - 多线程视频解码器内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48047739/

相关文章:

c# - ReaderWriterLockSlim 和脉冲/等待

multithreading - CAS 碰撞的 CPU 内部特性是什么?

ffmpeg - 如何使用 ffmpeg 解密加密的 mp4 文件

c# - 如何在单独的线程中加载多个 3D 几何图形而不会遇到线程所有权问题?

java - Executor服务设计模式

ios - UIImageView 由于内存警告而崩溃,尝试加载大量图像

javascript - 文档 Dom 树与分离的 Dom 树?

iphone - 即使没有有效的内存泄漏,我的应用程序也会收到内存警告

ffmpeg unicode文件名不起作用

html - 将 http 实时流式传输到 HTML5 视频客户端的最佳方法