前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vppinfra--bitmap学习

vppinfra--bitmap学习

作者头像
dpdk-vpp源码解读
发布2023-03-07 16:58:01
2520
发布2023-03-07 16:58:01
举报
文章被收录于专栏:DPDK VPP源码分析DPDK VPP源码分析

位图就是用每一bit位来存放某种状态,适用于大规模数据,存在两种状态0和1。通常情况下用来判断某个数据存不存在的。

位图一般都使用数组来实现的,数据的每一个元素的二进制位都表示一个数据在或不在的状态。0表示数据不存在,1表示数据存在。

vppinfra--bitmap的实现接口

vppinfra 结构中bitmap 是通过索引设置或者获取bit位的数值;位宽64bits,uword类型。底层也是一个vector结构。基本数据结构如下。

  • bitmap 存储区内存申请 1、按照指定的位图数量申请bitmap内存区。
代码语言:javascript
复制
/** 按照指定的位图bits数量申请bitmap内存区。
    @param [out] v - bitmap的首地址
    @param n_bits - 请求的bits数量
*/
#define clib_bitmap_alloc(v,n_bits) \
  v = vec_new (uword, ((n_bits) + BITS (uword) - 1) / BITS (uword)

2、确保bitmap内存区至少有n_bits ,不满足会动态扩充

代码语言:javascript
复制
#define clib_bitmap_validate(v,n_bits) \
  clib_bitmap_vec_validate ((v), ((n_bits) - 1) / BITS (uword)
  • bitmap 设置指定bit位
代码语言:javascript
复制
/* ai:bitmap的指针
 * i :需要操作d的bit位置
 * value : 设置i对应bit位位的数值,
 * return: 必须注意,当i不在ai内存范围内时,会对ai进行重新mmalloc
 * 可能存在ai执向内存区位置变更。
 */
always_inline uword *
clib_bitmap_set (uword * ai, uword i, uword value)
  • bitmap 获取指定bit位
代码语言:javascript
复制
/** Gets the ith bit value from a bitmap
    @param ai - bitmap 头指针
    @param i - 要询问的bit位位置
    @returns 返回bit位的数值,存在两种情况
             1、询问的bit位位置超过ai存储区d的大小,返回0
             2、正常返回bit位的数值。
*/
always_inline uword
clib_bitmap_get (uword * ai, uword i)
  • 设置或者获取一段范围内的bitmap数值
代码语言:javascript
复制
/*  n_bits 必须小于等于64。
 * i :起始bit位置
 */
always_inline uword
clib_bitmap_get_multiple (uword * bitmap, uword i, uword n_bits)
/* 必须需要注意bitmap位置的变更。
 */
always_inline uword *
clib_bitmap_set_multiple (uword * bitmap, uword i, uword value, uword n_bits)
  • 总结

本文只是简单介绍了vppinfra库中bitmap的简单的set和get使用及内存结构分布。还有很多其他的操作有需要了解的可以详细读源码。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DPDK VPP源码分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档