2015-04-15 63 views
2

我知道C指針是「一個包含地址的變量」。關於Fortran指針呢?可以通過將Fortran指針指向目標或使用allocate語句來分配Fortran指針。在這兩種情況下,指針的內存使用情況如何?比方說,我有一個指針:Fortran指針及其內存使用情況

pb => b(101:200)

是它正確地說,PB只佔據32位的存儲器,用於存儲B(101)的地址(如果編譯在32位可執行文件)和其他32位來存儲元素的數量(100)? 如果我有:

pb => b(5,1:10)

我想也步幅必須存儲,所以指針需要3 * 32位總,是不是正確的? 但是當我分配終場前:

Allocate(pb(1:100))

我其實我保留爲指針100個存儲位置?在這裏,我感到困惑。任何人都可以澄清嗎?

感謝 阿爾貝託

回答

1

在一般一個Fortran陣列(不僅是一個指針)可以被關聯到包含地址(32個或64比特),下界和上界和進展的描述符。當通過參數傳遞數組到等待假定形狀數組的過程時,通常會使用這種描述符。

當一個人直接分配一個變量聲明的指針時,這個指針與上面的描述符及其關聯的數組關聯在一起。

從一般的觀點來看,不建議直接分配指針(但這對於鏈接列表來說有時是必需的)。我通常只分配可分配數組,而我只使用指針指向已分配的內存區域。

Allocatable變量設計爲永不涉及內存泄漏!

Fortran指針的行爲與C指針不同。您必須瞭解Fortran指針實際上是指向的關聯內存的別名(別名,而不是指針會是更好的名稱)。

+0

等待分配時(pointername(1:10000))是否只分配描述符(地址= undefined,下限和上限以及stride = 1),還是實際上爲指針保留了10000個內存位置?非常感謝 – Lupocci

+0

還有什麼意思與別名?實踐中有什麼不同? – Lupocci

+1

在C中,你總是會區分指針和目標。 Fortran中不是這樣。大多數情況下,指針的使用等同於使用目標。唯一的例外是使用函數,或者指定特定於類似於=>(更改目標)或ASSOCIATED(檢查指針狀態)的指針。 –