如何强制数组溢出?

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

我有一个与 Portland Group FORTRAN 90 编译器相关的非常奇怪的问题。我正在尝试运行一个“依赖”数组溢出的代码才能正常工作。 我没有写这段代码! 发起者必须使用标志“-tp=piii”来编译它,以强制编译器避免进行避免数组溢出的优化。我想这个想法是为旧 P3 编写的编译器太原始而无法做这种事情。现在,当我尝试做同样的事情时,我收到消息“此安装不支持 pgf90-Fatal --tp piii”。所以我不能做同样的事情。 那么:pgf90 在其默认操作中是否会击败代码所需的数组溢出排序?与我一起工作的人显然也这么认为。而且,如果确实如此,是否可以使用其他一些标志来从“-tp=piii”标志中获取我需要的内容?

我打赌你绝对没想到你会收到这样的问题!想想

的感受。是的,一旦我能说服我的饲养员让我这样做,我就会重写它。

fortran90 pgf
2个回答
2
投票
arraybounds

boundschecking 等内容下进行索引 在 Fortran 90 之前,编写忽略或不知道数组边界的代码是常见的做法。 以这种方式编写的大部分代码仍然处于流行状态,我(像大多数 Fortran 程序员一样)经常遇到它。 可悲的是(这是有争议的),认为这是一种可以接受的编写代码的方式的态度也是如此。如果我在野外遇到这种态度,我会带着极端的偏见终止它。

咆哮……至少目前广泛使用的一些 Fortran 编译器的默认行为是不自动生成代码,在运行时,当程序超出数组边界时,就会发脾气。 然而,它们都可以选择生成包含运行时边界检查的代码。

在运行时不检查数组边界通常意味着更快的代码,大多数 Fortran 用户对更快的代码非常感兴趣,这在某种程度上解释了编译器的默认行为。

因此,总而言之,您应该不会在重现继承的代码所需的行为方面遇到太多麻烦。 如果 PGI 编译器没有默认不检查数组边界,我会感到有点惊讶;但它肯定会有一个打开或关闭该功能的选项。


0
投票

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