1

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

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

我的问题基本上是:您可以将 a1 保存在整个程序的寄存器中吗?

我会说是的...除非您用完寄存器并且必须将 a1 存储回内存。然后您将覆盖 a2 并丢失它的值,然后变量 a1 和 a2 将实际指向 a1 的值。

4

2 回答 2

5

a1并且a2equivalence语句中意味着这两个变量将占用相同的存储空间。改变一个会改变另一个,即使它们是不同类型的变量(例如,a1是整数和a2实数)。Fortran 没有为您提供任何方法来指定变量应该在寄存器中,并且equivalence语句似乎极有可能会禁止编译器自动执行此操作。

所以

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

不适用。

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

于 2013-04-28T21:35:23.360 回答
2

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

于 2013-04-28T21:36:03.010 回答