派生類型數組存儲在相同的列 - 主要順序。
您可能想知道單個組件在哪裏存儲。它們與數組元素地址的偏移量未指定,順序可能與聲明順序不同,並且它們之間可能存在各種間隔。但是,一旦建立了偏移量的值(通過調用loc()
或c_loc()
),對於該類型的所有實例而言,不管該數組是在其他位置還是在其他位置。
因此,組件的順序可以
A(1,1)%i,optional_padding,A(1,1)%j,optional_padding,A(2,1)%i,optional_padding,A(2,1)%j,optional_padding,...
而且
A(1,1)%j,optional_padding,A(1,1)%i,optional_padding,A(2,1)%j,optional_padding,A(2,1)%i,optional_padding,...
通過定義類型爲使用
type :: innerdata
sequence
integer :: i
real :: j
end type innerdata
可以強制序列sequence
類型
A(1,1)%i,A(1,1)%j,A(2,1)%i,A(2,1)%j,...
但是不建議這樣做,因爲對元素或組件的訪問速度可能會更慢,並且某些平臺可能不允許與某些字節數不匹配的內存訪問(導致訪問速度非常慢)。
如果您想知道類型的存儲大小,請使用storage_size()
內部函數(Fortran 2008)。結果是位。您也可以嘗試使用非標準但通用的擴展功能loc()
,它提供變量的地址。兩個相鄰元素的loc的差別是元素大小。使用c_loc()
(Fortan 2003)和transfer()
可以完成相同的操作,其結果爲integer(c_intptr_t)
。在MPI中,MPI_Sizeof()
函數也可以提供幫助。
是什麼讓你覺得它會以不同的方式存儲? – 2014-12-04 20:36:49
某些用戶定義的類型可能會有填充,以便使總大小爲8個字節或更多的倍數。有編譯器設置來影響這一點。 – ja72 2014-12-04 20:50:03