Rocket - diplomacy - misaligned
https://mp.weixin.qq.com/s/poCJBcx45clXHm6Uuv8M6w
介绍AddressSet.misaligned的实现。之前介绍的比较概括,也有偏差。这里根据实际执行结果,分析总结其功能。
1. 提取执行
misaligned功能比较独立,可以单独提取出来。执行观察运行结果,或者调试跟踪来观察其功能。
其中,需要解决的依赖是log2Floor。
执行结果如下:
2. 基本功能
misaligned的基本功能是把从base开始的size个地址,按照对齐原则,使用最少的基址/掩码对表示。
从上面的例子可以看出:
1) misaligned(0,4)
从0开始的4个地址,可以直接使用两位掩码进行表示,即(0,3=0b11);
2) misaligned(1,4)
从1开始的4个地址中:
a. 地址1=0b001最大对齐范围是1个地址,所以只能独自作为一个表示(1,0=0b0);
b. 地址2=0b010最大对齐范围是2个地址,由于还有三个地址没表示,可以把这两个地址包含在内,所以可以使用其表示为(2,1=0b1)。包含两个地址,即地址2和地址3;
c.地址4=0b100最大对齐范围就是4个地址,但是size中未表示的还有一个地址,所以只能使用表示(4,0=0b0)表示一个地址,即地址4;
3) misaligned(2,4)
a. 地址2=0b010最大对齐范围是2个地址,(2, 1=0b1)表示2个地址,即地址2和地址3;
b. 地址4=0b100最大对齐范围是4个地址,但size中未表示的地址还有2个,所以使用(4,1=0b1)表示2个地址,即地址4和地址5;
4) misaligned(3,4)
a. 地址3=0b011最大对齐范围是1个地址,只能独自使用一个表示(3,1=0b1);
b. 地址4=0b100最大对齐范围是4个地址,但size中未表示的地址还有3个,这3个地址无法使用一个掩码全部表示,所以使用(4,1=0b1)表示2个地址,即地址4和地址5;余下一个地址6另外表示;
c. 地址6=0b110最大地址范围是2个地址,但size中未表示的地址只有1个,所以使用(6,0=0b0)来表示这一个地址,即地址6;
3. 简单分析
a. 这是一个递归函数,如果size=0,即没有地址需要表示,则直接返回tail;tail中包含已经生成的基址/掩码对表示;
b. maxBaseAlignment表示基址允许的最大对齐地址数(这里取的是base的最低值为1的位);
c. maxSizeAlignment表示size中可以不多不少完整被一个基址/掩码对表示的地址数,这里取最高位。比如6=0b110,需要被分为4个和2个,两次对齐表示;
d. 从两个值中取较小的一个作为这一步向前跨出的地址数(step);
e. base+step:向前跨过step个地址;
f. size-step:地址数减少step个;
g. (base, step-1)作为基址/掩码对加入tail中;
Rocket - diplomacy - misaligned的更多相关文章
- Rocket - diplomacy - LazyModule的组织方式
https://mp.weixin.qq.com/s/vaDUekxkFkOJLmzg5jCngw 简单介绍LazyModule/LazyModuleImp的组织方式. 1. LazyModule L ...
- Rocket - diplomacy - AddressSet
https://mp.weixin.qq.com/s/ZsEVt1GslL7ufJdJlgpfNQ 介绍AddressSet的实现. 1. 基本定义 使用base/mask ...
- Rocket - diplomacy - LazyModule的实例化(补)
https://mp.weixin.qq.com/s/rgCRorjPYyyD6i7moIzbZg 介绍LazyModule和Node构造方法的执行过程,即实例化过程. 1. NullIn ...
- Rocket - diplomacy - LazyModule的实例化
https://mp.weixin.qq.com/s/9PsBt4_4qHx4i6C5XtuiUw 介绍LazyModule和Node构造方法的执行过程,即实例化过程. 1. NullIn ...
- Rocket - diplomacy - LazyModule
https://mp.weixin.qq.com/s/FBU8fE4u9-UK6mRGQOlvbQ 介绍LazyModule的实现. 1. children LazyModu ...
- Rocket - diplomacy - ValName
https://mp.weixin.qq.com/s/so-2x5KLfYF0IMCCqNThwQ 简单调试ValName实现: 1. 使用 Desugar之后如下: ...
- Rocket - diplomacy - NodeHandle相关类
https://mp.weixin.qq.com/s/GWL41P1G1BXm2sTeLmckdA 介绍NodeHandle相关的类. 1. NoHandle 顶层类(tra ...
- Rocket - diplomacy - DUEB参数模型的设计
https://mp.weixin.qq.com/s/9PEEpe1pkQDN9RWpOGSUCQ 介绍DUEB参数模型的设计,不包含实现(实现对设计做了简化). 1. DUEB di ...
- Rocket - diplomacy - 模块结构信息
https://mp.weixin.qq.com/s/cTRxXwWNEeb4-XX_t4bRcg 讨论模块结构信息的来源及使用方式. 1. diplomacy diplom ...
随机推荐
- E. Paint the Tree 树形dp
E. Paint the Tree 题目大意:给你一棵树,每一个点都可以染k种颜色,你拥有无数种颜色,每一种颜色最多使用2次,如果一条边的两个节点拥有同一种颜色,那么就说 这条边是饱和的,一个树的价值 ...
- 文件相关命令(find,tree,tar)文件属性信息 date
6.13day11 文件相关命令(find,tree,tar)文件属性信息date 1 文件相关命令 1.1 find命令 查找文件用f find /root -type f -name " ...
- ssh框架整合时的延迟加载问题(no session问题)的分析以及解决方案
当我们整合完三大框架,并采用hibernate的延迟加载方案时,会出现如下的异常: 现在对这个异常进行分析,如下图所示(模拟通过id查询用户信息的过程): 上图分析了为什么会出现no session的 ...
- 手把手教你进行Scrapy中item类的实例化操作
接下来我们将在爬虫主体文件中对Item的值进行填充. 1.首先在爬虫主体文件中将Item模块导入进来,如下图所示. 2.第一步的意思是说将items.py中的ArticleItem类导入到爬虫主体文件 ...
- 【Scala】代码实现Scala的各种模式匹配操作
文章目录 内容匹配 类型匹配 s表达式 case class 样例类 偏函数 内容匹配 import scala.util.Random object TestMatch { def main(arg ...
- centos7 下安装apache mysql php phpmyadmin。
1 安装mysql yum -y install mariadb-server systemctl start mariadb.service systemctl enable mariadb.ser ...
- 搞懂:MVVM模型以及VUE中的数据绑定数据劫持发布订阅模式
搞懂:MVVM模式和Vue中的MVVM模式 MVVM MVVM : model - view - viewmodel的缩写,说都能直接说出来 model:模型,view:视图,view-Model:视 ...
- SSH三大框架知识点
Hibernate ****************************************************************************************** ...
- 【Python代码】混合整数规划MIP/线性规划LP+python(ortool库)实现
目录 相关知识点 LP线性规划问题 MIP混合整数规划 MIP的Python实现(Ortool库) assert MIP的Python实现(docplex库) 相关知识点 LP线性规划问题 Linea ...
- CSS3面试题
1.隐藏网页中的元素有几种方式?这些方法有什么区别? 答案:三种方法. display:none;脱离文档流,不占页面空间,会改变页面布局. visivility:hidden;不会脱离文档流,不会改 ...