内存寻址/编址

0x01 寻址基本理解

一般常见对内存的理解是将他看成是一个数组. 数组元素肯定有个大小, 数组的元素还需要有个序号.

这个数组的序号就是内存的地址, 而数组元素的大小是内存寻址的方式,最为常见的是按字节寻址,即每个数组元素(单元)可以存储一个字节大小的内容.

cmu15213的例子

我们将内存地址0x...de20起的内存按照字节大小划分,可以得到如下结果

对应了读取的数据为

1

对应关系如下所示

内存地址 存储内容
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

proj2的read_matrix中,使用hexdumpxxd来以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

另外

posted @ 2022-02-20 22:26  ijpq  阅读(256)  评论(0编辑  收藏  举报