我想知道,如果类型比本机机器字大,并且具有编译器抽象支持,如32位系统上的int64_t
,那么内存中的字节顺序是否有任何规范?
例如,在小端机器上,我们是否应该假设内存布局是一个完整的64位交换顺序?或者像PDP-11一样可以自由地成为中端?
c.f。 http://en.wikipedia.org/wiki/Endianness#Middle-endian
因为在C99中的int64_t之前__int64(MS)或long long(gcc)不是标准的,所以在这种类型的字节顺序上假设没有任何东西吗?
由于
答案 0 :(得分:1)
为什么标准要在内存中的字节顺序上指定任何东西?在所有情况下,这取决于自由决定的编译器/架构。如果您对特定架构感兴趣,只需弹出调试器并观察简单程序的行为。
答案 1 :(得分:0)
C是一种可移植的语言,因此对整数类型的实际表示没有太多假设。标准甚至允许在值位之间插入填充位!有关更多信息,请参阅 6.2.6.2整数类型。
答案 2 :(得分:0)
我认为C标准对字节顺序没有任何规范。它依赖于实现。 在实践中,我认为int64_t的endianess遵循架构的endianess。因此,即使在32位程序中,int64_t在内存中的存储也就像它是64位程序一样。但是,当寄存器为32位时,可能需要两条指令来加载/存储数据。