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的更多相关文章

  1. Rocket - diplomacy - LazyModule的组织方式

    https://mp.weixin.qq.com/s/vaDUekxkFkOJLmzg5jCngw 简单介绍LazyModule/LazyModuleImp的组织方式. 1. LazyModule L ...

  2. Rocket - diplomacy - AddressSet

    https://mp.weixin.qq.com/s/ZsEVt1GslL7ufJdJlgpfNQ   介绍AddressSet的实现.   ​​   1. 基本定义   ​​ 使用base/mask ...

  3. Rocket - diplomacy - LazyModule的实例化(补)

    https://mp.weixin.qq.com/s/rgCRorjPYyyD6i7moIzbZg   介绍LazyModule和Node构造方法的执行过程,即实例化过程.     1. NullIn ...

  4. Rocket - diplomacy - LazyModule的实例化

    https://mp.weixin.qq.com/s/9PsBt4_4qHx4i6C5XtuiUw   介绍LazyModule和Node构造方法的执行过程,即实例化过程.     1. NullIn ...

  5. Rocket - diplomacy - LazyModule

    https://mp.weixin.qq.com/s/FBU8fE4u9-UK6mRGQOlvbQ   介绍LazyModule的实现.     ​​   1. children   LazyModu ...

  6. Rocket - diplomacy - ValName

    https://mp.weixin.qq.com/s/so-2x5KLfYF0IMCCqNThwQ   简单调试ValName实现:   1. 使用     ​​   Desugar之后如下: ​​ ...

  7. Rocket - diplomacy - NodeHandle相关类

    https://mp.weixin.qq.com/s/GWL41P1G1BXm2sTeLmckdA   介绍NodeHandle相关的类.     ​​   1. NoHandle   顶层类(tra ...

  8. Rocket - diplomacy - DUEB参数模型的设计

    https://mp.weixin.qq.com/s/9PEEpe1pkQDN9RWpOGSUCQ   介绍DUEB参数模型的设计,不包含实现(实现对设计做了简化).     1. DUEB   di ...

  9. Rocket - diplomacy - 模块结构信息

    https://mp.weixin.qq.com/s/cTRxXwWNEeb4-XX_t4bRcg   讨论模块结构信息的来源及使用方式.     ​​   1. diplomacy   diplom ...

随机推荐

  1. GoF23:建造者模式

    目录 概念 角色分析 实现方式 方式一 角色分析 代码编写 方式二 角色分析 代码编写 总结 优点 缺点 应用场景 建造者也抽象工厂模式的比较 ​ 建造者模式也属于创建型模式,它提供了一种创建对象的最 ...

  2. react——key值的理解

    key不是给开发者使用的,是给react在diff算法中使用的,diff算法会比较新旧虚拟dom,并且是同层比较,当同一层中有多个元素的时候,会比较这一层的key值, 如果key相同,属性改变积极更新 ...

  3. python执行脚本报错: Non-ASCII character '\xe4' in file yang.py on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

    这是因为我们在写python程序的时候,无论在注释里面出现中文,还是在代码里面出现中文,也就是说只要这个python程序里面有中文,我们就不能直接用python2来进行执行,如果安装是python3可 ...

  4. Java代码生成器多表配置优化,增加自定义实体功能

    目录 前言 多表配置优化 自定义实体 杂谈 结语 前言   最近利用零碎的时间对代码生成器做了进一步更新:优化多表配置模块,增加自定义实体功能,美化单表和多表配置的UI界面,修复用户反馈的若干bug, ...

  5. Linux --常见Linux目录名称

    Linux文件系统结构是从Unix文件结构演进过来的,在Linux文件系统中,通用的文件系统中,通用的目录名用于表示一些常见的功能.如下所示: 目录 用途 / 虚拟目录的根目录,通常不会再这里存储文件 ...

  6. POI 导入excel数据自动封装成model对象--介绍

    1.项目开发中,导入输入应该是常用的基本功能.我们经常会使用excel将数据导入到数据库,在导入之前必须得将excel数据转换成javaBean对象 2.由于此功能经常使用,所以开发此工具类方便日后轻 ...

  7. PAT1027 Colors in Mars (20分) 10进制转13进制

    题目 People in Mars represent the colors in their computers in a similar way as the Earth people. That ...

  8. LUNIX命令集

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户.多任务.支持多线程和多 CPU 的操作系统. Linux 能运行主要的 UNIX 工具软件 ...

  9. linux常用命令---域名服务

    域名服务

  10. VIOS挂载ISO文件

    6.VIOS挂载ISO文件 1.给vhost建立虚拟设备 mkvdev -vadapter vhostX -fbo -dev cdx 2.建立存放ISO的资料库 mkrep -sp rootvg -s ...