1 .内存地址由4位十六进制和8位十六进制表示的区别。 例如,写在一本书上的内存地址为0x0001,写在另一本书上的内存地址为0x00000001,这种情况很常见。 既然显示的都是1的内存地址,为什么一个以4位16进制显示,另一个以8位16进制显示呢?
首先,必须知道内存地址只是一个数字,表示内存区域。 这个空间有多少? 原来在计算机上,内存的容量以字节为基本单位。 也就是说,存储器地址表示1字节(8bit )的存储区域。
例如,32位操作系统通常支持高达4GB的内存空间。 也就是说,CPU只能寻址2的32次方(4GB )。 请注意,这里的4GB是字节单位,不是位。 也就是说,有4g=41024 m (字节)=410241024kb (字节)=4102410241024字节(字节) 8bit ),即2的32次方个8bit单位。
因此,4位十六进制表示的内存地址和8位十六进制表示的内存地址实际上只是表示8bit的存储空间。
为什么一个内存地址用4位十六进制表示,另一个内存地址用8位十六进制表示,这取决于硬件环境。 个人理解:某些CPU只能寻址16位(16条地址线),因此用4位十六进制表示地址就足够了。 某些CPU只能寻址32位(32条地址线),因此使用8位十六进制数。
另外,请注意210=1024
1g=1024 m1m=1024 kb1kb=1024 b (字节) 1字节=8字节2 .理解内存。
程序和数据通常存储在硬盘等存储器中,无论打开还是关闭都存在,不会丢失。 硬盘上有很多东西可以保存,但数据传输速度很慢。 因此,如果需要运行程序或打开数据,这些数据必须从存储(如硬盘)传输到另一个容量较小但速度非常快的存储,然后再发送到CPU进行处理。 这中间的存储器是内存。
任何存储器、软盘、硬盘、光盘或存储器都有地址。 为了保存数据,需要为一定单位的数据分配地址。 只有有地址,程序才能找到这些数据。 这一点我很理解。 想想你家为什么有门牌号。
要学习编程,你必须完全了解内存的地址。 我们编程中所有行的代码,代码中使用的所有数据,都必须在内存中有其映射地址。 当然,你不需要知道内存是如何寻址的。 那是计算机类的另一门课——操作系统。
存储器地址:
计算机将所有信息数字化,所以我知道自己把数据和命令记录在内存中的哪个位置。
请看看以下示例:
当您的计算机将名为“wjdsl”的名称存储在内存中时,它可以表示为:
在第一行中,各单元表示存储器,单元的内容是该内容记录的数据; 第2行各单元内的数字是对应存储器的地址。
可能会有人啄磨。 为什么一个“丁”字(“小”“明”字也一样)会占用两个存储器地址呢? 这是因为汉字不能容纳在一个地址(位置)里,必须放置在连续的两个地址空间里。 那么,放入另一个内存地址的是什么呢? 英语中的中文字,比如’a’,阿拉伯数字:比如’1’,很好。 然后,放入内存地址。 如果有字符串“ABC”并将其存储在内存中,则可以表示为(
现在我要问你几个问题:
计算机记住“丁”这个单词的内存地址是什么? 答案是1000H。 请看上面的照片
计算机说,所有信息都数字化为二进制0、1,因此“wjdsl”的名称也应该是一系列“0001 0010 0111 0101……”,如中图所示,计算机的元
是说明。 我只列举一个词来说明“丁”。 假设其中的0001 0010 0111 0101对应于“丁”字:
让我们也画一张字母“a”对应的图:
在上面的两幅图中:
第一行分别是“丁”和“a”,那是给人看的。
第二行是一系列0和1,这就是计算机内存中实际存储的数据。
第三行是存储器的地址。 并不是按0和1所占的位置分配地址。 每八个有地址。
对于第三行,可以理解为每个家庭分配一个地址,每个家庭都有一个客厅,这些都没有地址。
可显示:
“丁”确实是一系列的0、1组成的。 更准确地说,您会发现“丁”由16位0和1组成。 这16个数据都存储在两个内存地址中。
‘a’也一样,由8位的0、1组成。 占一个内存地址。
总结:内存地址是存储在内存中的数据的标识符,而不是数据本身。 可以从存储器地址中找到存储在存储器中的数据。
偏移是什么?
汇编语言的定义如下。
存储单元的实际地址和它所在的段的段地址之间的距离也称为段内偏移,也称为“有效地址或偏移”。 也就是说,存储单元的实际地址和该段的段地址之间的距离。 本质是“实际地址与该段的段地址的距离”
更清楚地说,在存储器中存储数据的方法是存储数据的“实际地址”=读取地址的偏移,
你也是
可以这样理解:就像我们现实中的“家庭地址”=“小区地址”+“门牌号”
上面的“偏移量”就好比“门牌号”
其实就相当于C++的指针一样啦,指出确切的地址而已……
首先有一个地方是起点,然后距离这个起点有多远,这个距离就是偏移量。
最小的距离是一个字节。。