Fortran Coder

查看: 14842|回复: 7
打印 上一主题 下一主题

[求助] COMMON代码对齐问题

[复制链接]

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

楼主
发表于 2019-1-26 09:34:23 | 显示全部楼层
举个例子,如下代码
[Fortran] 纯文本查看 复制代码
real :: a , b , c
integer :: d , e , f
integer(2) :: x
common /namespace/ a , b , c , x , d , e , f
end

a b c d e f 都是4个字节的。而 X 是 2 个字节的 。这就导致了内存里没有对齐,就像一条马路,因为一个井盖缺了一小块。
这样会导致运行效率不够高。(就像马路上有个井盖,大家经过的时候都要减个速)
于是编译器警告一下你。你可以在前面填充4个字节(Padding of 4 bytes),让它对齐。
也可以重新调换一下顺序(reorder elements ),让井盖到马路的尽头处(不太影响正常行车)
当然还可以用 -fno-align-commons 选项,让编译器不要管它。
COMMON是旧代码最恶心的语法之一,强烈建议新写代码不要使用它了。

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2019-1-26 23:39:03 | 显示全部楼层
一般不会影响正确性。(但也不敢保证,毕竟编译器和编译器都有差别)

每个程序单元,都加上 Implicit None 就可以了。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-5 09:44

Powered by Tencent X3.4

© 2013-2024 Tencent

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