传递给 Fortran 函数的参数数量有限制吗?

问题描述 投票:0回答:2

我遇到过一些 Fortran 90 代码,其中将 68 个参数传递给函数。 在网上搜索时,我只发现一些 CUDA Fortran 相关内容的传递 256 个字节的限制(http://www.pgroup.com/userforum/viewtopic.php?t=2235&sid=f241ca3fd406ef89d0ba08a361acd962)。

所以我想知道:可以传递给 Intel/Visual/GNU fortran 编译器的函数的参数数量是否有限制?

function fortran arguments limit
2个回答
3
投票

我遇到了有关 Fortran 90 标准的讨论:

http://www.nag.co.uk/sc22wg5/Guidelines_for_Bindings-b.html

相关部分如下斜体:

3.4 声明

Fortran 语句长度的限制对过程调用的长度施加了上限。虽然这不太可能是一个严重的强加,但自由格式的单个 Fortran 语句的上限为 5241 个字符,包括可能的标签(F90 第 3.3.1、3.3.1.4 节);在固定格式中,上限为 1320 个字符加上可能的标签(F90 第 3.3.2 节)。这些限制取决于“默认类型”的字符,即实际上是单字节字符;对于双字节字符(例如用于表意语言),限制取决于处理器,但可能具有相同的大小顺序。

Fortran 标准中对过程参数的最大数量没有限制

我正在研究中开发一个分析二进制文件的安全工具。我知道 C 语言对参数数量有限制(C90 标准中为 31 个,C99 标准中为 127 个),因此我认为我可以对一个向量进行维数以容纳与传入参数相关的 128 个项目。我遇到了一个由 FORTRAN 派生的二进制文件,其中传递了 290 个参数,这引发了我的讨论。该二进制文件来自 SPEC CPU2006 基准测试套件 benchmark 481.wrf,其中我看到一个名为(在二进制文件中)“solve_interface_”的过程,它在堆栈上设置 290 个参数,然后调用“solve_em_”来实际处理这些参数。毫无疑问,您可以在线找到这些程序的 FORTRAN 源代码。该二进制文件是由 GNU 编译器工具为 x86/Linux/ELF 系统生成的。


2
投票

我不认为 Fortran 标准明确施加了这样的限制。 但是,它们确实对一行代码的长度(132 个字符)和可以一起形成单个语句的行数(256)进行了限制。 我将让您自行计算在一次例程调用中可以使用多少个参数。

市场上的许多编译器对语句长度和可使用的连续行数都有更宽松的限制。 然而,如果编译器确实为任何例程施加了最大数量的参数,但该数量可能高于任何实际需求,我也不会感到惊讶。

© www.soinside.com 2019 - 2024. All rights reserved.