☰
大端存储和小端存储的区别以及与网络编程的联系
2026/9/30 4:35:28 网站建设 项目流程

目录

1.理解内存

2.与网络编程的联系


大小端描述的是多字节数据在内存中存放的方式。大端存储是高位字节存放在低地址处,小端存储是低位字节存放在低地址处。
比如0x12345678,大端存储:12 34 56 78 小端存储:78 56 34 12

另外,需要再简单明确一下内存模型。

1.理解内存

对于地址编号:主要分为32位和64位,32位对应4字节而64位对应8字节。这个是大家耳熟能详的,但需要继续补充一些细节才可以把内存模型理解的更清晰。我们这里说的内存就是主存,简单讲就是内存条,可以把它理解为一个数组,该数组的元素大小是1字节,那么数组就需要有下标,所以地址编号就相当于下标。对于32位系统,有32根地址总线,每根总线不同的电信号可以表示0和1,所以有2^32个地址编号,而每个编号对应1字节的元素大小,所以2^32个1byte大小就是4GB内存,64位系统也是同样的道理,只不过64位系统对应2^64个地址编号,对应的内存容量是一个很夸张的数字,现代家用电脑没有那么大的内存容量,但依然可以用4GB、16GB、24GB、32GB内存条等等,因为地址编号总量用不完但至少是够用的。

另外需要明确一点,内存条只提供存储介质,它是通用硬件。如何编址如何寻址由CPU和内存控制器决定,16GB的内存条既可以用于32位系统也可以用于64位系统,区别只不过是地址编号的数量不同,32位平台只能用其中的4GB左右的内存,而64位平台可以用满。此外32位平台和64位平台CPU型号是不同的,一个可以一次性处理4字节数据,一个可以一次性处理8字节数据。在CPU寻址时,地址总线给出电信号,内存返回对应地址编号中存储的数据。

理解了上述原理,再来调取程序的内存窗口,看得就更清楚了。这是32位平台,因为地址编号是32位的,当前的地址编号0x006FFD8B只对应12这一个字节的数据也就是char b,而int a的数据在后面。

这里是int a的数据,通过计算可以算出a的地址编号应该是0x006FFD94,相对于char b向后偏移了9个字节,地址编号也对应相差9.

从内存窗口可以看出,本机采用小端存储。

2.与网络编程的联系

因为不同的主机,内存的存储方式是不一样的,有的可能采用大端存储,有的采用小端。底层上是有差异的,要屏蔽掉这个差异就需要通信双方约定采用统一的方式进行通信。网络通信协议规定:统一采用大端的存储方式进行网络通信。对于套接字编程有两个接口:htonl和ntohl,对应主机序列转网络序列和网络序列转主机序列。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询