我知道C指针是"一个保存地址的变量。" Fortran指针怎么样?可以通过将Fortran指针指向目标或使用allocate语句来分配Fortran指针。在两种情况下,指针的内存使用情况如何?让我们说我有一个指针:
pb => b(101:200)
是否正确地说pb只占用32位内存(如果在32位可执行文件上编译)来存储b(101)的地址而另外32位来存储元素的数量(100)? 如果我有:
pb => b(5,1:10)
我想也必须存储步幅,所以指针总共需要3 * 32位,是否正确? 但是当我分配一个指针:
Allocate(pb(1:100))
我实际上是为该指针保留了100个内存位置吗?我在这里很困惑。任何人都可以澄清一下吗?
感谢 阿尔贝托
答案 0 :(得分:1)
一般来说,fortran数组(不仅是指针)可以与包含地址(32或64位),下限和上限以及步幅的描述符相关联。当通过参数将数组传递给等待假定形状数组的过程时,通常使用这种描述符。
当直接分配一个变量声明指针时,该指针与上面的描述符及其相关数组相关联。
从一般的角度来看,不建议直接分配指针(例如,有时链接列表需要这样做)。我通常只分配可分配的数组,而我只使用指针指向已经分配的内存区域。
可分配变量的设计绝不会涉及内存泄漏!
Fortran指针的行为与C指针不同。你必须明白Fortran指针实际上是它所指向的相关内存的别名(别名而不是指针本来就是一个更好的名字)。