我理解两个变量,比如a1和a2出现在Fortran中的Equivalence(a1,a2)语句中,然后它们占用相同的内存空间。所以说这发生在一个过程中,其中a1和a2都是该过程中的局部变量。
这意味着您不仅可以在内存中拥有a1和a2的副本吗?因为其中一个值将被覆盖。您可以将a1保留在内存位置并将a2保存在整个过程的寄存器中,这样就可以了吗?
我的问题基本上是:你可以将a1保留在整个程序的注册表中吗?
我会说是的......除非你的寄存器用完了,否则a1必须存回内存。然后你将覆盖a2并失去它的值,然后变量a1和a2实际上将指向a1的值。
答案 0 :(得分:5)
a1
语句中的 a2
和equivalence
表示这两个变量将占用相同的存储空间。改变一个将改变另一个,即使它们是不同类型的变量(例如,a1
是一个整数而a2
是真实的。)。 Fortran没有给你任何方法来指定变量应该在寄存器中,并且equivalence
语句似乎很可能会自动禁止编译器这样做。
所以
您可以将a1保留在内存位置并将a2保留在寄存器中 整个程序,这样会好的吗?
不适用。
我强烈建议不要使用equivalence
...这是有害的,并且可能只保留在语言中以支持遗留代码。如果您需要跨类型传输数据,那么现代Fortran方法就是transfer
内在函数。
答案 1 :(得分:2)
使用equivalence
的唯一原因是同一个东西有两个名字。作为一名fortran程序员,你无法控制寄存器或任何此类事情。不要考虑内存和寄存器。认为你有一个带有两个名字的“盒子”。无论您使用哪个名称,都可以存储到同一个框中或从中检索。