Ns3 Buffer类学习笔记

Ns3 Buffer类学习笔记:
1.大小会在运行时动态调整
2.缓冲区类的实现使用了一种COW(写时复制)技术,不管数据是从底层数据缓冲区(保存数据的缓冲区)中添加还是移除的,都可以确保可以其在许多缓冲区实例之间共享。
3.当多个缓冲区实例持有对同一基础缓冲区数据对象的引用时,它们必须能够检测到它们想要执行的操作何时应该触发缓冲区数据的副本。如果BufferData::m_count字段为1,则意味着只有一个缓冲区实例引用了BufferData实例,因此修改它是安全的。如果修改超出了缓冲区数据定义的“脏区”,修改缓冲区数据的内容也是安全的。在其他情况下,必须在修改之前复制缓冲区数据。
4.要理解Buffer::Add和Buffer::Remove方法的工作方式,首先需要理解用于跟踪缓冲区内容的“虚拟偏移量”。每个缓冲区实例在其缓冲区数据实例中包含实际数据字节,但它也包含“虚拟零数据”,通常用于表示应用程序级负载。除非用户分割一个缓冲区,否则不会分配内存来存储应用级有效负载的零字节:这个应用级有效负载由一对整数跟踪,这对整数描述了“虚拟零区”在缓冲区内容中的开始和结束位置。
Buffer的简单示意
类成员:
public:

class iterator
{
public:
inline void Next (void); //后一个byte
inline void Prev (void); //前一个byte
inline void Next (uint32_t delta); //后delta个byte
inline void Prev (uint32_t delta); //前detla个byte
uint32_t GetDistanceFrom (Iterator const &o) const; //返回与iterator o之间的byte数
bool IsEnd (void) const; //判断是不是最后一个byte
bool IsStart (void) const; //判断是不是第一个byte
inline void WriteU8 (uint8_t data); //在buffer中写data,在这里iterator移动是一个byte一个byte地移动
inline void WriteU8 (uint8_t da ta, uint32_t len); ///在buffer中写data,重复写len次,在这里iterator移动 是len个byte len个byte地移动
void WriteU16 (ui

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值