5

我想知道,如果类型大于本机机器字,并且具有编译器抽象支持,例如int64_t在 32 位系统上,是否对内存中的字节顺序有任何规范?例如,在小端机器上,我们是否应该假设内存布局是完整的 64 位交换顺序?还是像 PDP-11 一样自由地成为中间端?

cf http://en.wikipedia.org/wiki/Endianness#Middle-endian

因为 __int64 (MS) 或 long long (gcc) 在 C99 中的 int64_t 之前不是标准的,所以假设这些类型的字节顺序上的任何内容不是很牵强吗?

谢谢

4

3 回答 3

1

为什么标准要指定内存中的字节顺序?在所有情况下,这都由编译器/架构自由决定。如果您对特定架构感兴趣,只需弹出调试器并观察一个简单程序的行为。

于 2013-11-01T09:15:19.553 回答
0

我不认为 C 标准对字节顺序有任何规范。它依赖于实现。在实践中,我认为 int64_t 的字节序遵循架构的字节序。所以即使在 32 位程序中,int64_t 在内存中的存储也和 64 位程序一样。但它可能需要两条指令来加载/存储数据,因为寄存器是 32 位的。

于 2013-11-01T09:25:18.643 回答
0

C 是一种可移植语言,因此对整数类型的实际表示并没有太多假设。该标准甚至允许在值位之间散布填充位!有关详细信息,请参阅6.2.6.2 整数类型

于 2013-11-01T07:04:48.657 回答