当前位置: 首页 > wzjs >正文

360企业自助建站做社交的招聘网站

360企业自助建站,做社交的招聘网站,域名批量注册查询,东北网站建设公司av_buffer_unref 是 FFmpeg 中用于管理引用计数和内存释放的核心函数,其内部实现机制如下: ‌一、核心流程‌ ‌引用计数递减‌ 函数首先对 AVBufferRef 的 buffer->refcount 进行原子递减操作(通过 atomic_fetch_add_explicit 等机制保证…

av_buffer_unref 是 FFmpeg 中用于管理引用计数和内存释放的核心函数,其内部实现机制如下:

一、核心流程

  1. 引用计数递减
    函数首先对 AVBufferRef 的 buffer->refcount 进行原子递减操作(通过 atomic_fetch_add_explicit 等机制保证线程安全)。

  2. 引用计数检查

    • 若递减后 refcount > 0:仅释放当前 AVBufferRef 结构体,保留底层 AVBuffer 和数据内存。
    • 若递减后 refcount == 0:触发内存释放流程(包括 AVBuffer 自身及其数据)。
  3. 内存释放逻辑

    • 调用 buffer->free 回调函数(如默认的 av_buffer_default_free 或用户自定义的释放函数),释放 buffer->data 指向的数据内存。
    • 若 AVBuffer 属于内存池(AVBufferPool),则通过 buffer_pool_release_buffer 将内存块返回池中以供复用。
  4. 资源清理

    • 置空 AVBufferRef->buffer 指针,避免悬垂引用。
    • 释放 AVBufferRef 结构体本身的内存。

二、关键设计细节

  1. 线程安全
    引用计数的增减操作通过原子指令实现,确保多线程环境下数据一致性26。

  2. 内存池优化
    若 AVBuffer 来自内存池,释放时不会立即归还给系统,而是通过链表管理复用,减少频繁内存分配开销。

  3. 回调扩展性
    buffer->free 允许注册自定义释放逻辑(如 GPU 内存释放需调用特定驱动 API),支持异构硬件资源管理。


三、代码逻辑简化示例

 
void av_buffer_unref(AVBufferRef **ref) {if (!*ref)return;AVBuffer *buf = (*ref)->buffer;// 原子操作减少引用计数int refcount = atomic_fetch_sub_explicit(&buf->refcount, 1, memory_order_acq_rel);if (refcount == 1) { // 引用归零if (buf->free)   // 调用释放回调buf->free(buf->opaque, buf->data);if (buf->pool)   // 内存池回收逻辑buffer_pool_release_buffer(buf->pool, buf);av_free(buf);    // 释放AVBuffer结构体}av_freep(ref);       // 释放AVBufferRef并置空指针
}

四、关联机制

  1. 与 av_buffer_ref 的关系
    av_buffer_ref 增加引用计数并复制 AVBufferRef,而 av_buffer_unref 负责递减计数和释放,两者共同维护引用生命周期。

  2. 与 AVPacket/AVFrame 的交互
    当 AVPacket 或 AVFrame 调用 av_packet_unref 或 av_frame_unref 时,内部最终通过 av_buffer_unref 释放底层数据内存。


通过上述机制,av_buffer_unref 实现了高效且安全的内存管理,成为 FFmpeg 多模块资源共享和生命周期控制的基础。

av_freep  和 av_freep函数的区别

  1. av_free(void * p)

    • 参数类型‌:接受 void * 类型的指针13。
    • 作用‌:仅释放指针指向的内存块,‌不修改指针本身的值‌,释放后指针仍指向原地址(即悬垂指针)

                

uint8_t *data = av_malloc(100); 
av_free(data); // 释放内存,但 data 仍指向已释放的地址

  1. av_freep(void ** p)

    • 参数类型‌:接受 void ** 类型的指针地址12。
    • 作用‌:
      1. 释放指针指向的内存块;
      2. 将原指针置为 NULL‌,避免悬垂指针问题12。
       
      uint8_t *data = av_malloc(100); 
      av_freep(&data); // 释放内存,并将 data 置为 NULL


文章转载自:

http://JnWb3f8O.ctLzf.cn
http://XwvOBmP6.ctLzf.cn
http://Qz7e4N0L.ctLzf.cn
http://3L1s2PYg.ctLzf.cn
http://GO5lfkbK.ctLzf.cn
http://byExEBLA.ctLzf.cn
http://Fr7DC4cS.ctLzf.cn
http://vZf45c6F.ctLzf.cn
http://IekNPleh.ctLzf.cn
http://z3s1Yh5n.ctLzf.cn
http://xuJYHY7J.ctLzf.cn
http://wbOkOCnk.ctLzf.cn
http://8Pkdusla.ctLzf.cn
http://AzUSJNjv.ctLzf.cn
http://KjLJ7XaE.ctLzf.cn
http://tQWwBeyu.ctLzf.cn
http://BZQakEOn.ctLzf.cn
http://7EbpOvfp.ctLzf.cn
http://SSnp6KLo.ctLzf.cn
http://JcOy8zHQ.ctLzf.cn
http://EDDQQA6x.ctLzf.cn
http://Oq8iAXad.ctLzf.cn
http://GMq8Y6fJ.ctLzf.cn
http://7V56HEKq.ctLzf.cn
http://vsZLDp4S.ctLzf.cn
http://dmZJGFyC.ctLzf.cn
http://IEZdNrGR.ctLzf.cn
http://RhalLJuq.ctLzf.cn
http://3GbXzyUw.ctLzf.cn
http://v8hTKTu9.ctLzf.cn
http://www.dtcms.com/wzjs/761393.html

相关文章:

  • 盘锦网站建设哪家好南通网络公司网站
  • 重庆设计网站建设php房产中介网站源码
  • 请问做网站和编程哪个容易些西安网站建设开发公司
  • 天水+网站建设jsp网站开发详解书籍
  • 门户网站设计欣赏婚纱网站建设案例
  • 网站开发自我介绍大连美建科技有限公司
  • 东莞天助网的网站做网站前需要做什么准备
  • 营销型网站建设哪家公司好中建南方建设集团官方网站
  • 手机访问自动跳转到wap网站的代码在线做章网站
  • 千助做网站怎么样wordpress换编辑器
  • 杭州江干网站建设黑马程序员教程
  • 织梦网站导航浮动手机app开发软件教程
  • 东莞最新网站建设软件好用的免费网站建设
  • 清远网站seoseo网络优化师
  • 温州网站优化排名北京市朝阳区住房建设网站
  • 网站如何做中英文双语言母婴类网站怎么建设
  • 如何做好网站宣传谷歌服务加速 wordpress
  • 流量最大的网站wordpress加载视频教程
  • wap网站编辑器做网站熊掌号
  • ps教学网站制作步骤wordpress按钮打开外部链接
  • 学网站建设难龙泉建设工程有限公司网站
  • 重庆企业网站设计制作乐清小程序
  • 郑州网站定制网页游戏排行大全
  • 在线生成app免费网站seo优化发布高质量外链
  • 自己电脑怎么做网站搜索引擎的优化方法有哪些
  • 如何查看网站的点击量广州最新新闻
  • 怎么在网上接网站建设做一个网站多久
  • 织梦网站上传及安装沈阳高端网站建设
  • 适合前端做项目的网站海口免费网站建设
  • 网站平台建设哪家公司好比较好看的网站设计