内存寻址/编址
0x01 寻址基本理解
一般常见对内存的理解是将他看成是一个数组. 数组元素肯定有个大小, 数组的元素还需要有个序号.
这个数组的序号就是内存的地址, 而数组元素的大小是内存寻址的方式,最为常见的是按字节寻址
,即每个数组元素(单元)可以存储一个字节大小的内容.
cmu15213的例子
我们将内存地址0x...de20起的内存按照字节大小划分,可以得到如下结果
对应了读取的数据为
对应关系如下所示
内存地址 | 存储内容 |
---|---|
0x7ffffde20 | 0x09 |
0x7ffffde21 | 0x00 |
0x7ffffde22 | 0x00 |
0x7ffffde23 | 0x00 |
0x7ffffde24 | 0x02 |
0x7ffffde25 | 0x00 |
0x7ffffde26 | 0x00 |
0x7ffffde27 | 0x00 |
0x7ffffde28 | 0x03 |
其中0x09的表示是指09是16进制数,0位于高4位,9位于低4位,0x09= 0000, 1001
cs61c的例子link
proj2的read_matrix中,使用hexdump
和xxd
来以16进制打印2进制数据,结果如下
该数据前8B表示两个in32,第一个是矩阵的行,第二个是矩阵的列
0300对应03 00,小端法表示,低地址到高地址为0x03, 0x00,0x03表示0000 0011,因此就是int32的3
可以看到,内存的编址是按位编址的
0x...20 = 0010 0000
0x...21 = 0010 0001
0x...22 = 0010 0010
0x...23 = 0010 0011
另外
本文来自博客园,作者:ijpq,转载请注明原文链接:https://www.cnblogs.com/ijpq/p/15428324.html