2017-03-16 34 views
0

我需要聲明一個有83000行和83000列的矩陣。 當我聲明它在以下形式:在gfortran中分配大矩陣時發生整數溢出

double precision,allocatable :: MAT(:,:) 
allocate(MAT(83000,83000)) 

從MinGW的32位是成功的,但是當我運行* .EXE,我收到以下錯誤代碼通過gfortran的編譯:

integer overflow when calculating the amount of memory to allocate 

如果我改變矩陣的維數,即(nrow=100,ncol=100),一切正常,所以代碼似乎是正確的。

我的問題是,當尺寸很大時,我該如何聲明矩陣?

+0

83000 * 83000大於最大32位整數值2147483648.這就是溢出的原因,元素數量太大。但是,溢出不會發生在我的計算機上,64字節的整數用於大小。請告訴我們更多關於你的Windows和gfortran的信息。 32位或64位?哪個版本?你如何編譯? –

+0

無論如何,如果您的系統或編譯器是32位的,那麼無論如何您要求的內存太多。 –

+0

@VladimirF thx爲您的答案,我使用MinGW(因此gfortran 32位)在CodeBlocks環境下(Windows 7 64位)。我如何解決我的問題?你推薦編譯器使用? – plus91

回答

2

32位編譯器不能處理這樣的大型數組。 83000 * 83000大於最大32位整數值2147483648,因此無法計算數組的大小。您必須使用64位編譯器。 (即使在默認設置Allocate large array in PGI Fortran的一些64位編譯器中也會發生這種溢出,但gfortran應該沒問題。)

矩陣(56 GB)也遠遠超過32位進程可尋址的最大內存量。

+0

我用64位編譯器,SilverFrost FTN95 64位編譯,但我知道e相同的錯誤.... – plus91

+0

** **確切**錯誤?鏈接我的筆記和上面的鏈接,一些編譯器可能需要特殊的標誌來啓用大型數組。 –

+0

這與至極我程序編譯: ftn95 file.f90/64 SLINK64 file.obj /file:lol.exe 當我嘗試exute lol.exe,我得到以下錯誤: HTTP://它。 tinypic.com/r/2vdim1e/9 – plus91