在 ARM 上切换字节顺序

Dim*_*kiy 5 android arm processor cpu-architecture endianness

我听说ARM处理器可以在小端和大端之间切换。处理器需要这个做什么?是在Android手机上使用的吗?

Sea*_*ane 5

根据处理器的不同,可以动态切换字节顺序。较旧的处理器将以一种字节序状态启动,并且预计会保持该状态。在后一种情况下,整个设计通常会设置为大端或小端。

支持混合字节序操作的主要原因是支持网络堆栈,其中所操作的底层数据集是本机大字节序。这对于交换机/路由器和移动基站来说非常重要,因为处理器运行的是明确定义的软件堆栈,而不是作为通用应用设备运行。

请注意,在不同的 ARM 架构中,大端行为有多种不同的实现,您需要准确检查它在任何特定内核上的工作原理。


Gab*_*han -4

您可以切换字节顺序,但在操作系统启动并运行后就不会这样做。这只会把事情搞砸。如果您打算这样做,那么您应该在启动顺序的早期就这样做。当您的应用程序运行时,字节序已选择并且不会更改。

你为什么要这么做?唯一真正的原因是,如果您正在编写必须处理大量小端数据的嵌入式软件,或者运行一个假设小端字节序编写的程序,并且未固定为与字节序无关。此类数据往往来自 x86 应用程序,该应用程序以其本机字节顺序(x86 是小端字节序)写出内容。没有太多其他理由这样做。您将看到 ARM 几乎完全以大端模式运行。

  • 手臂是小端,手臂上的大端是例外。 (3认同)
  • 这仅适用于 ARMv6,或许也适用于大多数 ARMv7。在 ARMv8 中,字节序是动态的(并且仅应用于数据端)。 (2认同)