';等价性';用Fortran语言
我知道两个变量,比如a1和a2出现在Fortran的等价(a1,a2)语句中,然后它们占用相同的内存空间。假设这发生在a1和a2都是局部变量的过程中 这意味着你的内存中不能只有a1和a2的副本,对吗?因为其中一个值将被覆盖。在整个过程中,可以将a1保存在内存位置,将a2保存在寄存器中,这样就可以了,对吗 我的问题基本上是:你能在整个过程中将a1保存在登记簿中吗';等价性';用Fortran语言,fortran,procedures,register-allocation,Fortran,Procedures,Register Allocation,我知道两个变量,比如a1和a2出现在Fortran的等价(a1,a2)语句中,然后它们占用相同的内存空间。假设这发生在a1和a2都是局部变量的过程中 这意味着你的内存中不能只有a1和a2的副本,对吗?因为其中一个值将被覆盖。在整个过程中,可以将a1保存在内存位置,将a2保存在寄存器中,这样就可以了,对吗 我的问题基本上是:你能在整个过程中将a1保存在登记簿中吗 我会说是的……除非寄存器用完,a1必须存储回内存。然后您将覆盖a2并丢失它的值,变量a1和a2将实际指向a1的值 a1和a2在equal
我会说是的……除非寄存器用完,a1必须存储回内存。然后您将覆盖a2并丢失它的值,变量a1和a2将实际指向a1的值
a1
和a2
在equality
语句中表示这两个变量将占用相同的存储空间。更改一个变量将更改另一个变量,即使它们是不同类型的变量(例如,a1
是整数,a2
是实数)。Fortran没有提供任何方法来指定变量应该在寄存器中,而且极有可能等价性语句会禁止编译器自动执行此操作
所以
您可以将a1保留在内存位置,将a2保留在寄存器中,以便
整个过程都很顺利,对吧
这是不适用的
我强烈建议不要使用等价性
。。。它是有害的,可能只保留在语言中以支持遗留代码。如果您需要跨类型传输数据,现代Fortran方法是传输
内在的。a1
和a2
在等价
语句中意味着这两个变量将占用相同的存储空间。更改一个变量将更改另一个变量,即使它们是不同类型的变量(例如,a1
是整数,a2
是实数)。Fortran没有提供任何方法来指定变量应该在寄存器中,而且极有可能等价性语句会禁止编译器自动执行此操作
所以
您可以将a1保留在内存位置,将a2保留在寄存器中,以便
整个过程都很顺利,对吧
这是不适用的
我强烈建议不要使用等价性
。。。它是有害的,可能只保留在语言中以支持遗留代码。如果您需要跨类型传输数据,现代Fortran方法是传输
固有方法。使用等效
的唯一原因是为同一事物使用两个名称。作为fortran程序员,您无法控制寄存器或任何类似的东西。不要考虑内存和寄存器。假设你有一个有两个名字的“盒子”。无论您使用哪个名称,您都在同一个框中存储或检索。使用等效的唯一原因是同一事物有两个名称。作为fortran程序员,您无法控制寄存器或任何类似的东西。不要考虑内存和寄存器。假设你有一个有两个名字的“盒子”。无论您使用哪个名称,您都在同一个框中存储或检索。谢谢您的回答。你能从理论上回答这个问题吗?我们正在学习一门关于编译器的课程,这是一个我们正在修改的问题,因此更多的是关于寄存器分配,而不是Fortran的使用(我们根本不是用Fortran编程)。如果将a1和a2放在不同的位置,例如,一个在RAM中,另一个在寄存器中,很难让程序按照等价语句的要求运行。每当一个变量的值被改变时,编译器生成的可执行文件也必须更新另一个变量。可能是打字。谢谢你的回答。你能从理论上回答这个问题吗?我们正在学习一门关于编译器的课程,这是一个我们正在修改的问题,因此更多的是关于寄存器分配,而不是Fortran的使用(我们根本不是用Fortran编程)。如果将a1和a2放在不同的位置,例如,一个在RAM中,另一个在寄存器中,很难让程序按照等价语句的要求运行。每当一个变量的值被改变时,编译器生成的可执行文件也必须更新另一个变量。可能是类型转换。