WebRTC Native M96 基础Base模块介绍之缓冲区相关的封装(CopyOnWriteBuffer、ByteBufferWriter、BitBufferWriter、BufferT、Buf

在这里插入图片描述

rtc_base copy_on_write_buffer

在WebRTC中,不论是发送接收数据通道的数据、还是发送接收音视频数据,数据本身都存储于一个临时的Buffer中,这个Buffer的实现类为CopyOnWriteBuffer。顾名思义,该Buffer实现了 “写时复制” 的技术。

封装了一个写时复制缓存CopyOnWriteBuffer,其实就是封装了一个共享指针Buffer以及处理nullptr Buffer的情况,WebRTC中常用于RTP包的传递。

Copy-on-write 主要用于共享操作系统进程的虚拟内存,在 fork 系统调用的实现中。通常,该进程不会修改任何内存并立即执行一个新进程,完全替换地址空间。因此,在分叉期间复制所有进程的内存将是浪费的,而是使用写时复制技术。

通过将某些内存页标记为只读并记录对该页的引用次数,可以使用页表有效地实现写时复制。当数据写入这些页面时,操作系统内核会拦截写入尝试并分配一个新的物理页面,该页面使用写时复制数据进行初始化,但如果只有一个引用,则可以跳过分配。然后内核用新的(可写的)页更新页表,减少引用的数量,并执行写操作。新分配确保一个进程的内存变化在另一个进程中不可见。

构造函数:

  CopyOnWriteBuffer();
  // Share the data with an existing buffer.
  CopyOnWriteBuffer(const CopyOnWrite

猜你喜欢

转载自blog.csdn.net/wangshubo1989/article/details/125322582
今日推荐