我相信最根本的区别将来自 Delphi 中“String”类型和 Fortran-90 中可变长度字符串的不同性质。
在 Delphi 中,String 是一种引用类型。不仅如此,它还是一个引用计数和修改时复制类型。
那是你写的时候:
var
a, b: String;
begin
a := 'The quick brown fox';
b := a;
b := b + ' jumped over the lazy dog.';
end;
当a分配给b时,不会复制字符串字符。取而代之的是b和a是现在引用相同字符串且引用计数为 2 的指针。
然后修改b时,只有在此时(由编译器)生成代码,才需要使用它自己的引用计数 (1) 创建一个初始的重复字符串,并从原始引用计数递减。
但是,简单地将字符串添加到列表中显然不会修改它。
当TStringList读取文件的内容时,会从文件中读取一个字符串。然后将字符串值添加到内部列表时,不会复制字符串本身,而是增加引用计数,这反映了即使“LoadFromFile”方法不再使用该字符串(因为它的内容已经替换为从文件中读取的下一个字符串)先前添加到内部列表项的字符串仍然有效。
LoadFromFile然后必须初始化一个新字符串,准备好从文件中接收下一个字符串,但这是不可避免的。
不同之处在于,在 Fortran 版本中,除了在从文件中读取每个字符串时对其进行初始化之外,还必须在将项目添加到列表时复制这些字符串中的每一个。由于引用计数的字符串类型,在 Delphi 代码中消除了这种字符串数据的复制。
因此,Fortran 代码的效率将不可避免地降低,而 Delphi 中引用计数的 String 类型的更高效率将对类的几乎每个领域产生影响——根据定义和设计——这种字符串类型的重“用户” .
除了 Delphi 编译器与 Fortran 的内存管理性能或代码生成效率方面的任何其他相对差异之外,这将是超越和补充的。