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

对于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则说明为小端模式(低字节存到高地址),否则为大端模式(低字节存到了低地址)。

相关推荐
70asunflower6 小时前
Emulation,Simulation,Virtualization,Imitation 的区别?
linux·docker
聆风吟º7 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann
神梦流7 小时前
ops-math 算子库的扩展能力:高精度与复数运算的硬件映射策略
服务器·数据库
NPE~7 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化
神梦流7 小时前
GE 引擎的内存优化终局:静态生命周期分析指导下的内存分配与复用策略
linux·运维·服务器
凡人叶枫7 小时前
C++中输入、输出和文件操作详解(Linux实战版)| 从基础到项目落地,避坑指南
linux·服务器·c语言·开发语言·c++
wdfk_prog7 小时前
[Linux]学习笔记系列 -- [drivers][input]serio
linux·笔记·学习
xuhe27 小时前
[全流程详细教程]Docker部署ClawBot, 使用GLM4.7, 接入TG Bot实现私人助理. 解决Docker Openclaw Permission Denied问题
linux·docker·ai·github·tldr
Lsir10110_8 小时前
【Linux】进程信号(下半)
linux·运维·服务器
skywalk81638 小时前
unbound dns解析出现问题,寻求解决之道
运维·服务器·dns·unbound