Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
';等价性';用Fortran语言_Fortran_Procedures_Register Allocation - Fatal编程技术网

';等价性';用Fortran语言

';等价性';用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出现在Fortran的等价(a1,a2)语句中,然后它们占用相同的内存空间。假设这发生在a1和a2都是局部变量的过程中

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

我的问题基本上是:你能在整个过程中将a1保存在登记簿中吗


我会说是的……除非寄存器用完,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中,另一个在寄存器中,很难让程序按照等价语句的要求运行。每当一个变量的值被改变时,编译器生成的可执行文件也必须更新另一个变量。可能是类型转换。