小编mit*_*orn的帖子

arm和x86架构中c/c ++语言的差异

我正在尝试将最初为x86架构编写的代码移植到arm.

https://github.com/SDLash3D

最初它是为msvc/win32开发的,代码中有很多错误,所以可能有UB.

当使用gcc编译时,代码正在使用x86,但是它有不同的行为.它似乎丢失了数组中的一些数据,武器开关不起作用.它影响了服务器和客户端库.

应用程序是单线程的,因此不是同步问题.

默认情况下,char在arm上是无符号的,所以我添加-fsigned-char到编译器标志,但它没有解决问题.arm和x86 c代码之间还有什么区别?

我尝试使用gcc和clang在arm上编译代码并且没有区别,因此它不是编译器错误.

PS我使用gcc-4.9(而不是4.8)编译了x86的代码,并得到了相同的行为.之后,我结合了两个编译器,发现问题出在net_encode.c中.

到那时,塞巴斯蒂安骑士发现了这一点

iValue /= pField->multiplier; iValue *= pField->multiplier;

当iValue为整数且pField-> multiplier == 1.0f时,有时会更改整数值.

可以通过在乘法之前添加检查pField-> multiplier!= 1.0f来修复它.

c c++ x86 arm

0
推荐指数
2
解决办法
4240
查看次数

标签 统计

arm ×1

c ×1

c++ ×1

x86 ×1