ffmpeg 内存管理

ffmpeg的内存管理代码位于libavutil\mem.c,主要定义了两种内存管理方式。

1) 原生malloc

有几个常见的内存管理函数,av_malloc(),av_realloc(),av_mallocz(),av_calloc(),av_free(),av_freep()。

av_malloc:几种复杂的内存分配方式主要是为了字节对齐

av_mallocz:分配内存,然后清零内存中的数据

av_free:释放内存

av_freep:释放内存,然后将指针置空

av_calloc:内部还是调用的av_mallocz只是传入参数不同

av_realloc:分配起始地址不变,内存扩大

2) 用户定制内存管理

使用MALLOC_PREFIX来控制是否使用自定义的内存管理方式,如果使用自定义的内存管理方式,需要实现以下函数:

#define malloc   AV_JOIN(MALLOC_PREFIX, malloc )

#define memalign AV_JOIN(MALLOC_PREFIX, memalign )

#define posix_memalign AV_JOIN(MALLOC_PREFIX, posix_memalign)

#define realloc AV_JOIN(MALLOC_PREFIX, realloc )

#define free AV_JOIN(MALLOC_PREFIX, free )

 可以通过编译选项来开自定义内存管理方式

--malloc-prefix = PREFIX前缀malloc和PREFIX的相关名称

--custom-allocator = NAME使用受支持的自定义分配器

posted @ 2022-01-25 13:49  追随技术  阅读(635)  评论(0)    收藏  举报