32位系统上的64 int64_t的字节序

时间:2013-11-01 06:33:06

标签: c++ c endianness int64

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

c.f。 http://en.wikipedia.org/wiki/Endianness#Middle-endian

因为在C99中的int64_t之前__int64(MS)或long long(gcc)不是标准的,所以在这种类型的字节顺序上假设没有任何东西吗?

由于

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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