内存操作的常见函数位于libavutil\mem.c
av_malloc()
av_malloc()是FFmpeg中最常见的内存分配函数。
av_malloc()的代码可以简化成如下形式。
void *av_malloc(size_t size)
{
void *ptr = NULL;
/* let's disallow possibly ambiguous cases */
if (size > (max_alloc_size - 32))
return NULL;
ptr = malloc(size);
if(!ptr && !size) {
size = 1;
ptr= av_malloc(1);
}
return ptr;
}
可以看出,此时的av_malloc()就是简单的封装了系统函数malloc(),并做了一些错误检查工作。
关于size_t
size _t 这个类型在FFmpeg中多次出现,简单解释一下其作用。size _t是为了增强程序的可移植性而定义的。不同系统上,定义size_t可能不一样。它实际上就是unsigned int。
av_realloc()
av_realloc()用于对申请的内存的大小进行调整。
void *av_realloc(void *ptr, size_t size)
{
#if CONFIG_MEMALIGN_HACK
int diff;
#endif
/* let's disallow possibly ambiguous cases */
if (size > (max_alloc_size - 32))
return NULL;