我理解两个变量,比如a1和a2出现在Fortran中的等价(a1,a2)语句中,那么它们占用相同的内存空间。假设这发生在一个过程中,其中a1和a2都是该过程中的局部变量。
这意味着内存中不能只有a1和a2的副本,对吧?因为其中一个值将被覆盖。您可以将a1放在内存位置,并在整个过程中将a2放在一个寄存器中,这样就可以了,对吧?
我的问题基本上是:您能在整个过程中将a1保存在一个寄存器中吗?
我会说,你的寄存器用完了,a1必须被存储回内存。然后您将覆盖a2并丢失它的值,然后变量a1和a2实际上都将指向a1的值。
发布于 2013-04-29 05:35:23
equivalence
语句中的a1
和a2
意味着这两个变量将占用相同的存储空间。改变其中一个将改变另一个,即使它们是不同类型的变量(例如,a1
是整数而a2
是实数)。Fortran没有提供任何方法来指定变量应该在寄存器中,而且equivalence
语句极有可能会禁止编译器自动执行此操作。
所以
你可以把a1放在内存位置,把a2放在整个过程的寄存器中,这样就可以了,对吧?
是不适用的。
我强烈建议不要使用equivalence
...它是有害的,可能只保留在支持遗留代码的语言中。如果您需要跨类型传输数据,那么现代的Fortran方法就是transfer
内部方法。
发布于 2013-04-29 05:36:03
使用equivalence
的唯一原因是同一事物有两个名称。作为一个fortran程序员,你不能控制寄存器或任何类似的事情。不要考虑内存和寄存器。假设你有一个有两个名字的“盒子”。无论您使用哪一个名称,您都是在同一个框中存储或检索。
https://stackoverflow.com/questions/16268052
复制相似问题