2014-07-21 25 views
2

我正在查看Fortran 2008中引入的storage_size內在函數以獲取用戶定義類型man storage size的大小。它以位爲單位返回大小,而不是字節。我想知道是什麼原理是以位而不是字節返回大小。 因爲我需要以字節爲單位的大小,所以我只是簡單地將結果除以8.假設返回的大小總是可以被8整除是安全的嗎?Fortran storage_size內在函數

回答

3

期望字節始終爲8位(請參閱模塊iso_fortran_env中的CHARACTER_STORAGE_SIZE)!對於storage_size()的理由,請聯繫SC22/WG5或X3J3的某個人,但其中一位前成員總是說(在comp.lang.fortran上),這些問題沒有多少意義和一個明確的答案。通常只有人推動這個變體而不是另一個。

我的猜測會與前面的函數bit_size()對稱是原因之一。爲什麼有bit_size()而不是byte_size()?我猜你不必將其與字節大小相乘(並檢查一個字節的大小),並且可以立即應用位操作過程。

給你最後一個問題。是的,在具有8位字節的機器上(其他機器沒有Fortran 2008編譯器AFAIK),位大小總是可以被8整除,因爲一個字節是最小的可尋址內存塊,結構不能只使用一個字節的一部分。

+0

謝謝。我看到iso_c_binding模塊中還有一個c_sizeof,它返回字節大小。 – jitihsk

+1

是的,但是它僅限於Fortran 2008中C可互操作的結構。大多數編譯器也支持'sizeof()'作爲擴展。 –