检查地址是否与行缓存对齐
Checking if an adress is linecache aligned
这是一个我过去失败的测验问题,尽管可以访问解决方案,但我不明白得出正确答案的不同步骤。
这是问题所在:
这些地址中的哪一个是行缓存对齐的
a. 0x7ffc32a21164
b. 0x560c40e05350
c. 0x560c40e052c0
d. 0x560c3f2d71ff
以及问题的解决方法:
Each hex char is represented by 4 bits
It takes 6 bits to represent 64 adress, since ln(64)/ln(2) = 6
0x0 0000
0x4 0100
0x8 1000
0xc 1100
________
2^3 2^2 2^1 2^0
8 4 2 1
Conclusion: if the adress ends if either 00, 40, 80 or c0, then it is aligned on 64 bytes.
The answer is c.
我真的不明白我们如何从 6 位表示到这个答案。任何人都可以在给出的解决方案中添加一些内容以使其更清楚吗?
问题归结为:哪个数是 64 的倍数?剩下的就是了解他们使用的数字系统。
64在二进制中写成1000000,在十六进制中写成0x40。因此 64 的倍数将以 0x00 (0 * 64)、0x40 (1 * 64)、0x80 (2 * 64) 或 0xC0 (3 * 64) 结尾。 (然后循环重复。)答案c是结尾正确的。
打个十进制比喻:哪个数是5的倍数? 0 * 5 是 0,1 * 5 是 5,之后循环重复。所以我们只需要看最后一位数字。如果它是 0 或 5,我们知道该数字是 5 的倍数。
这是一个我过去失败的测验问题,尽管可以访问解决方案,但我不明白得出正确答案的不同步骤。
这是问题所在:
这些地址中的哪一个是行缓存对齐的
a. 0x7ffc32a21164
b. 0x560c40e05350
c. 0x560c40e052c0
d. 0x560c3f2d71ff
以及问题的解决方法:
Each hex char is represented by 4 bits
It takes 6 bits to represent 64 adress, since ln(64)/ln(2) = 6
0x0 0000
0x4 0100
0x8 1000
0xc 1100
________
2^3 2^2 2^1 2^0
8 4 2 1
Conclusion: if the adress ends if either 00, 40, 80 or c0, then it is aligned on 64 bytes.
The answer is c.
我真的不明白我们如何从 6 位表示到这个答案。任何人都可以在给出的解决方案中添加一些内容以使其更清楚吗?
问题归结为:哪个数是 64 的倍数?剩下的就是了解他们使用的数字系统。
64在二进制中写成1000000,在十六进制中写成0x40。因此 64 的倍数将以 0x00 (0 * 64)、0x40 (1 * 64)、0x80 (2 * 64) 或 0xC0 (3 * 64) 结尾。 (然后循环重复。)答案c是结尾正确的。
打个十进制比喻:哪个数是5的倍数? 0 * 5 是 0,1 * 5 是 5,之后循环重复。所以我们只需要看最后一位数字。如果它是 0 或 5,我们知道该数字是 5 的倍数。