我知道,当我从二进制文件和网络读取数据时,我应该关心这个问题,但是用源代码做什么呢?如果我分配价值,例如int = 42
,对endianness有影响吗?它会在大端机器上编译,然后在小端机上不能正常工作吗?或者编译器会处理这个问题?
发布于 2021-08-18 05:46:04
尽管它被认为是一种低级语言,但在编写C++代码时,实际上并不是为具体的计算机编写代码。
相反,C++代码的目标是所谓的抽象机器( C++ 抽象机 ),编译器的任务是将程序在抽象机器上所引起的行为转换为对实际目标机器产生相同效果的东西(技术上的任何东西)。
在实践中,大多数编译器绕过它,将代码半直接转换为最终目标,但这仍然是他们必须尊重的模型。
Endianness,以及我们认为理所当然的其他事情,并不是一个存在于C++抽象机器中的概念。正如您所指出的,除非您深入研究原始数据,否则您不必担心它。
作为一个极端的例子,以>>
,位移位运算符为例.对于多字节类型,它在抽象机器上有一个定义良好的行为,因此它的行为不能依赖于目标的特性。不是实际的位被移位,而是值。
发布于 2021-08-18 05:37:58
当您将程序编译成机器代码时,必须针对特定的CPU体系结构。构建链将注意生成目标CPU理解的代码和数据。
通常不能在不兼容的CPU上执行编译的程序。(不是没有模仿。在仿真的情况下,仿真程序必须处理二进制表示的差异)
https://stackoverflow.com/questions/68833372
复制相似问题