哪些情况会导致Linux/Unix同一份源码编译为64位和32位可执行程序后运行结果不同?

吃土的汉子 发布于 2012/11/30 09:16
阅读 1K+
收藏 0

我在工作中有时会遇到一些使用Linux/Solaris 64位机器的客户提交问题,由于我们64位机器比较稀缺,所以常常编译出32位可执行程序后,用32位机器重现客户的问题。但是有些时候对于同一份源码,编译出的32位可执行程序竟然无法重现64位的问题,于是只好再去用64位机器重现。导致这种情况的原因有哪些呢?

由于我们已经做了一些跨平台处理,对于用户的大数据,64/32位都使用同样的数据存储长度,不会出现特定平台下整数上溢之类的情况。

先前曾经看过一些关于栈溢出之类的文章,因此知道64位和32位系统寄存器数量不同,以及64位存在可执行标志位的,对于存在堆栈溢出风险的程序,他们的运行结果是不一样的。那么是否还有其他的因素,导致结果不一致?

这属于实践中的现实问题,欢迎各位填坑~~~

以下是问题补充:

@吃土的汉子:语言为 C/C++ (2012/11/30 10:05)
加载中
0
吃土的汉子
吃土的汉子

眼看就要沉了,怎么还没人来回帖

@中山野鬼 ,这属于基础学科,大神有研究没

0
中山野鬼
中山野鬼
基本都是位宽的问题。包括溢出,累进计算(32位的乘法处理64位,需要额外设计等),指针转换,特别是后者,危害很大。如果指针是64位,转成32位后,再转会64位,会丢数据的。
吃土的汉子
吃土的汉子
请教下“转成32位后,再转会64位”是神马意思,现在是在64位机上运行64位的exe, 32位机上运行32位的exe,没有转换啊
0
抢小孩糖吃
抢小孩糖吃
建议能用java尽量用java,不然专门组织做底层跨平台处理。
吃土的汉子
吃土的汉子
十几年,好几十万行的代码,不是说能用Java就能用的。而且用C++慢的时候要跑一两天,Java的话要死人了……
0
ChenQi
ChenQi
你确定一定是64~32的问题吗?有没有多试几种平台,看看结果?
返回顶部
顶部