奇思妙想 · 2024年 5月 28日 0

大小端之争

165 次浏览

一般而言,大小端是硬件架构而言,Intel默认是小端,PPC是大端,ARM默认是小端,但有些架构可配置为大端。例如ARMv8 aarch64 SCTLR_EL1(System Control Register, Exception Level 1)b'25 EE位为1代表大端。

  • 编译型语言大部分会跟随硬件大小端。
  • 中间件语言可脱离具体硬件架构,Java定义class文件必须是大端(The class File Format),当然,具体到特定硬件架构还需要遵循硬件大小端约束,例如跑在x86机器JVM内存中保存多字节数据必须转换成小端。
  • 网络协议默认就是大端,小端平台发送网络数据就必须先转换成大端。
  • 注意,gcc早期可以使用-mbig-endian或-mlittle-endian编译大小端代码,新版本这些选项已经废弃,改用-mtune跟随硬件架构大小端编译相应代码。