首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Fortran中的“‘Equivalence”

Fortran中的“‘Equivalence”
EN

Stack Overflow用户
提问于 2013-04-29 05:23:18
回答 2查看 256关注 0票数 1

我理解两个变量,比如a1和a2出现在Fortran中的等价(a1,a2)语句中,那么它们占用相同的内存空间。假设这发生在一个过程中,其中a1和a2都是该过程中的局部变量。

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

我的问题基本上是:您能在整个过程中将a1保存在一个寄存器中吗?

我会说,你的寄存器用完了,a1必须被存储回内存。然后您将覆盖a2并丢失它的值,然后变量a1和a2实际上都将指向a1的值。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-29 05:35:23

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

所以

你可以把a1放在内存位置,把a2放在整个过程的寄存器中,这样就可以了,对吧?

是不适用的。

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

票数 5
EN

Stack Overflow用户

发布于 2013-04-29 05:36:03

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16268052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档