当前位置: 首页 > Linux

信息的表示和处理-信息在计算机中是如何存储的

时间:2023-04-07 01:54:57 Linux

信息的存储一个二进制数称为一个比特,八个比特组成一个字节。字节是最小的可寻址内存单元,即每个字节整体上对应一个地址。机器级程序将内存视为称为虚拟内存的大型字节数组。内存中的每个字节对应一个称为地址的唯一编号。内存中地址的集合称为虚拟内存空间。以上概念可与数组内存相关:关联数组下标下标集合数组元素虚拟内存地址虚拟内存空间字节信息读取C指针指向字节块第一个字节的虚拟地址,字节块可以是程序,结构、整数、字符等。C编译器将指针与字节块字节类型相关联,并访问该类型对应的字节数来获取值。字长每台计算机都有一个字长,表示指针值的标称大小。即地址用字长的二进制数来表示,所以字长决定了虚拟内存空间最多可以容纳多少个地址,从而决定了最多有多少字节。以一台32位机器和一台64位机器为例,一台32位机器可以容纳大约4GB字节,而一台64位机器可以容纳大约16EB字节。所以在64位机上指针指向的地址在32位机上可能会溢出。寻址和字节顺序不同的数据类型可以占用一个或多个字节。下图显示了C语言数据类型在32位和64位机器上占用的字节长度。上面我们已经知道有些程序对象可以占用多个字节,那么我们需要搞清楚:多字节对象在内存中是如何排列字节的?对象的地址是什么?情况是这样的:多字节对象被存储为一个连续的字节序列,其地址是字节中最小字节的地址。以int变量x为例,如果它的地址是0X1000,那么这个变量存放在四个内存位置0x1000、0x1001、0x1002、0x1003。有两种方法可以安排一个对象的字节。大端方式,低字节,高地址,符合阅读习惯。小端法,低字节低地址。然后使用big-endianmode(only)(但是它生产的个人电脑使用的是intel兼容的处理器,所以使用little-endianmode)一种新型的微处理器:双端方式,可以配置为big-endianorlittle-endianmachine(但是,特定的操作系统也会影响字节顺序。例如,微处理器上最常见的两个操作系统iOS和Android只能运行在little-endian模式下。)在某些情况下,字节顺序可以影响程序:在不同类型的机器之间通过网络发送二进制数据时,字中的字节会倒序。因此,编写网络应用程序代码以遵守有关字节顺序的既定规则,确保发送机器将内部表示转换为网络标准,而接收机器将网络标准转换为内部表示。检查机器级程序时,读取表示整数的字节序列。当读取小端机器生成的机器级程序表示时,在编写绕过正常类型系统的程序时,字节以相反的顺序(正常读取顺序的相反)表示。在C语言中,强制转换或联合可用于允许引用具有数据类型(与创建对象时定义的数据类型不同的数据类型)的对象。对于大多数应用程序编程,不推荐使用此技术,但对于系统级编程很有用,甚至是必需的。关注公众号,让我们一起努力