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 ...
随机推荐
- N - Subpalindromes URAL - 1989 哈希+线段树
N - Subpalindromes URAL - 1989 这个是一个哈希+线段树,这个题目也不算特别难,但是呢,还比较有意思. 这个题目给你两个操作,一个是回答l~r 区间是不是回文,一个是对一个 ...
- Java基础-数据类型的拓展
整数拓展:进制 二进制 0b开头 十进制 八进制 0开头 十六进制 0x开头 0~9 A~F 16 int i = 10; int i1 = 010;//八进制 0开头 int i2 = 0x10;/ ...
- JVM 虚拟机&&类加载(一)
虚拟机 虚拟机简介 Java 虚拟机(JVM)是运行java程序的抽象计算机,它是计算机设备的规范,可以采用不同方式进行实现,java 程序通过运行在JVM中实现跨平台,一次编译到处运行,不同的操作系 ...
- Spring Batch 读 10 万条记录,写到 MongoDB
实践内容 从 MariaDB 一张表内读 10 万条记录,经处理后写到 MongoDB . 具体实现 1.新建 Spring Boot 应用,依赖如下: <!-- Web 应用 --> & ...
- 【Hadoop离线基础总结】Hive调优手段
Hive调优手段 最常用的调优手段 Fetch抓取 MapJoin 分区裁剪 列裁剪 控制map个数以及reduce个数 JVM重用 数据压缩 Fetch的抓取 出现原因 Hive中对某些情况的查询不 ...
- [hdu1506 Largest Rectangle in a Histogram]笛卡尔树
题意:http://acm.hdu.edu.cn/showproblem.php?pid=1506 如图,求最大的矩形面积 思路: 笛卡尔树:笛卡尔树是一棵二叉树,树的每个节点有两个值,一个为key, ...
- HDU 2005 (水)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2005题目大意:给定年份,计算是第几天 解题思路: 很水,判定下是否为闰年,方法:四年一闰,百年不闰,四 ...
- C:复试
C语言程序设计基础知识 C语言特点 1.是一种兼有高级语言和汇编语言优点的语言 2.是一种结构化程序设计语言 3.数据类型丰富 4.具有丰富的运算符 5.具有预处理功能 合理算法的特点 1.有输入 2 ...
- 00005-js 获取uuid
admin.guid = function () { function S4() { return (((1+Math.random())*0x10000)|0).toString(16).subst ...
- gentoo 下安装lamp
更新系统 emerge --sync emerge --update world 安装apache emerge www-servers/apache rc-update add apache2 de ...