Fortran Coder

查看: 12709|回复: 6
打印 上一主题 下一主题

[编译器] 32位编译器和64位编译器的区别是什么?

[复制链接]

60

帖子

17

主题

0

精华

专家

F 币
454 元
贡献
266 点
跳转到指定楼层
楼主
发表于 2014-10-17 16:41:11 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
小弟我在做一个网格的时候碰到的一件怪事。

从boss那边拿到的一个程序改的

大概是这样的

module common
(省略部分)
integer::II,JJ
(省略部分)
end module common

然后在主程序和自程序中都有 use common

但是在调用子程序的时候大概是这样:
call subAA(II,JJ,output)
write(*,*)II,JJ

在子程序中II,JJ都没有参与计算,只是作为循环的控制量,我用的是Microsoft visual fortran2008,但是用32位的ivf发现II经过了子程序后数值改变为0,而JJ并没有发生改变。而在同一台电脑上用64位的ivf编译则没有这种错误。
本人电脑是64位的,出现这种错误的原因到底是什么?在使用中该如何避免?
望各位大神指点。

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

60

帖子

17

主题

0

精华

专家

F 币
454 元
贡献
266 点
沙发
 楼主| 发表于 2014-10-22 08:34:15 | 显示全部楼层
珊瑚虫 发表于 2014-10-20 16:53
查一下你的II,JJ 在程序中有无重复定义的情况

确定没有,语句上也应该没问题。

60

帖子

17

主题

0

精华

专家

F 币
454 元
贡献
266 点
板凳
 楼主| 发表于 2014-10-22 08:39:31 | 显示全部楼层
mangix2010 发表于 2014-10-22 04:07
这个跟32位,64位没关系吧

用Ifort编译,调用
C:\Program Files (x86)\Intel\Compiler\11.1\054\bin\ia32\ifortvars_ia32.bat
来编译的时候出错,但是调用
C:\Program Files (x86)\Intel\Compiler\11.1\054\bin\intel64\ifortvars_intel64.bat
的时候结果是对的。
debug的时候发现问题是出现在调用子程序向其传递值形参的时候出错。

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-2 23:11

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表