av_malloc 与 av_free 的函数原型

本文深入探讨了ffmpeg源码中内存管理函数av_malloc和av_free的实现细节。av_malloc实际上是通过各种平台兼容的方式进行内存分配,最终会调用malloc,并在分配失败时进行错误处理。而av_free则根据平台特性选择对应的内存释放函数,如-aligned_free或free。这两者都确保了内存操作的跨平台兼容性和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、av_malloc 函数

在ffmpeg的源码中mem.c 文件中,发现实际上它调用的还是  ptr = malloc(size),size的值是不能大于max_alloc_size ( INT_MAX) 。

void *av_malloc(size_t size)
{
    void *ptr = NULL;

    if (size > max_alloc_size)
        return NULL;

#if HAVE_POSIX_MEMALIGN
    if (size) //OS X on SDK 10.6 has a broken posix_memalign implementation
    if (posix_memalign(&ptr, ALIGN, size))
        ptr = NULL;
#elif HAVE_ALIGNED_MALLOC
    ptr = _aligned_malloc(size, ALIGN);
#elif HAVE_MEMALIGN

    #ifndef __DJGPP__
        ptr = memalign(ALIGN, size);
    #else
        ptr = memalign(size, ALIGN);
    #endif   
#else
    ptr = malloc(size);
#endif


    if(!ptr && !size) {
        size = 1;
        ptr= av_malloc(1);
    }

#if CONFIG_MEMORY_POISONING
    if (ptr)
        memset(ptr, FF_MEMORY_POISON, size);
#endif

    return ptr;
}

 

二、av_free 函数

在ffmpeg源码中的mem.c文件中,发现实际上它调用的还是  free(ptr);

void av_free(void *ptr)
{
#if HAVE_ALIGNED_MALLOC
    _aligned_free(ptr);
#else
    free(ptr);
#endif
}

 

总结

内存的分配与释放归根结底离不开malloc 与 free函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值