Fortran中的“等价”

时间:2013-04-28 21:23:18

标签: fortran procedures register-allocation

我理解两个变量,比如a1和a2出现在Fortran中的Equivalence(a1,a2)语句中,然后它们占用相同的内存空间。所以说这发生在一个过程中,其中a1和a2都是该过程中的局部变量。

这意味着您不仅可以在内存中拥有a1和a2的副本吗?因为其中一个值将被覆盖。您可以将a1保留在内存位置并将a2保存在整个过程的寄存器中,这样就可以了吗?

我的问题基本上是:你可以将a1保留在整个程序的注册表中吗?

我会说是的......除非你的寄存器用完了,否则a1必须存回内存。然后你将覆盖a2并失去它的值,然后变量a1和a2实际上将指向a1的值。

2 个答案:

答案 0 :(得分:5)

a1语句中的

a2equivalence表示这两个变量将占用相同的存储空间。改变一个将改变另一个,即使它们是不同类型的变量(例如,a1是一个整数而a2是真实的。)。 Fortran没有给你任何方法来指定变量应该在寄存器中,并且equivalence语句似乎很可能会自动禁止编译器这样做。

所以

  

您可以将a1保留在内存位置并将a2保留在寄存器中   整个程序,这样会好的吗?

不适用。

我强烈建议不要使用equivalence ...这是有害的,并且可能只保留在语言中以支持遗留代码。如果您需要跨类型传输数据,那么现代Fortran方法就是transfer内在函数。

答案 1 :(得分:2)

使用equivalence的唯一原因是同一个东西有两个名字。作为一名fortran程序员,你无法控制寄存器或任何此类事情。不要考虑内存和寄存器。认为你有一个带有两个名字的“盒子”。无论您使用哪个名称,都可以存储到同一个框中或从中检索。

相关问题