大小端模式:字节顺序的奥秘

对于16位、32位等位数更高的处理器,由于寄存器宽度大于1字节,必然存在如何安排多字节的问题,因此导致了大端存储模式(big-endian)和小端存储模式(little-endian)的产生。

大小端模式在处理器访问内存时用于描述寄存器的字节顺序和内存中的字节顺序之间的关系。

如一个16位的short类型变量X在内存中的地址为 0x0010,X的值为0x1122,其中,0x11为高字节,0x22为低字节。

  • 对于大端模式,就将0x11(高位)放在低地址中,将0x22(低位)放在高地址中。
  • 对于小端模式,就将0x11(高位)放在高地址中,将0x22(低位)放在低地址中。

很多的 ARM 处理器默认使用小端模式,有些 ARM 处理器还可以由硬件来选择是大端模式还是小端模式。Cortex-A 系列的处理器可以通过软件来配置大小端模式。

如何判断处理器是大端模式还是小端模式?

使用联合体(union),其存放顺序是所有成员均从低地址开始存放,利用该特性可以轻松判断 CPU 对内存采用大端模式还是小端模式读写。

c 复制代码
#include <stdio.h>
bool checkCPU(void)
{
	union w
	{
		int a;
		char b;
	}c;
	c.a = 1;
	return (c.b==1);
}
int main()
{
	printf("%d\n", checkCPU());
	return 0;
}

以上代码如果输出1则说明为小端模式(低字节存到高地址),否则为大端模式(低字节存到了低地址)。

相关推荐
2023自学中几秒前
Linux 内核与用户空间 内存管理详解(堆与栈篇)
linux·嵌入式·内存·开发板
极客先躯几秒前
高级java每日一道面试题-2026年02月09日-实战篇[Docker]-Docker 容器有哪些安全风险?如何缓解?
java·运维·网络·安全·docker·容器
yuanzhengme2 分钟前
Ollama【部署 07】搭建本地智能体的简单说明(局域网离线部署Ollama+模型迁移+Docker部署AnythingLLM)
运维·docker·容器·大模型·ollama·本地智能体
似水এ᭄往昔6 分钟前
【Linux系统编程】--虚拟地址空间
linux·服务器
不会C语言的男孩9 分钟前
Linux 系统编程 · 第 3 章:文件 I/O 基础
linux·服务器
硬件工程师宝典16 分钟前
I2C从入门到精通之一:I2C的历史起源和综合简介
服务器·嵌入式硬件·硬件架构·i2c
运维老郭16 分钟前
Kubernetes 二进制部署完全指南:从零搭建生产级HA集群
运维·云原生·kubernetes
吠品19 分钟前
.NET 8 单文件发布:把 exe 和一堆 dll 打进一个文件里
服务器·数据库·windows
MXsoft61829 分钟前
## 告警治理:从“风暴”到“精准”——运维告警压缩与根因定位实践指南
运维
MXsoft61837 分钟前
**智慧校园哑终端监控:摄像头、门禁、信息屏的统一管理实践**
运维