gpt4 book ai didi

c - SPARC 和 x86 GCC 一个 C 代码的不同结果

转载 作者:太空狗 更新时间:2023-10-29 11:04:36 25 4
gpt4 key购买 nike

一段 C 代码在“SPARC Solaris 5.9”和“Linux OpenSuse 12.1 i686 (x86)”上带来不同的结果。

#include <stdio.h>

int main(int argc, char* argv[])
{
char Cmd = '\x00';

char tmp[2];
char* TempBuff = &tmp;

*(short*)TempBuff = (Cmd << 8) | 0x5;

printf("Out: First byte:0x%02X, Second byte: 0x%02X\n", *(TempBuff), *(TempBuff+1) );

return 0;
}

编译:gcc cshort.c –o cshort

在“Linux OpenSuse 12.1 i686 (x86)”上:> 输出:第一个字节:0x05,第二个字节:0x00

在“SPARC Solaris 5.9”上:> 输出:第一个字节:0x00,第二个字节:0x05

为什么,为什么我们收到不同的结果?


环境详情:

“SPARC Solaris 5.9”:

uname –a: SunOS V245-1 5.9 Generic_118558-34 sun4u sparc SUNW,Sun-Fire-V245。

psrinfo –v:sparcv9 处理器以 1504 MHz 运行,并具有 sparcv9 浮点处理器。

海湾合作委员会版本 3.4.6


“Linux OpenSuse 12.1 i686 (x86)”:

uname –a: Linux linux-755z.site 3.1.10-1.19-desktop #1 SMP PREEMPT Mon Feb 25 10:32:50 UTC 2013 (f0b13a3) i686 i686 i386 GNU/Linux

cat/proc/cpuinfo: Intel(R) Core(TM)2 Duo CPU T8100 @ 2.10GHz

gcc 版本 4.6.2 (SUSE Linux)


下面附上两个版本的反汇编代码。

disassembled code of x86 versin


disassembled code of SPARC versin

最佳答案

如果您在小端平台上将 8 位数组类型转换为 short(16 位),您将获得与在大端平台上执行相同操作时不同的结果。

编译器无法帮助你,因为这只是字节顺序的本质......

关于c - SPARC 和 x86 GCC 一个 C 代码的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22426076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com