2013-10-10 161 views
0

我正在嘗試在MEX函數中創建矩陣。以下作品:爲什麼mxCreateNumericMatrix的最大尺寸小於系統最大陣列尺寸?

uint64_t N; 
N = 2147483647; // N = 2*2^30 -1 
plhs[0] = mxCreateNumericMatrix(N,1,mxUINT8_CLASS,mxREAL); 

但是,我無法創建一個數組,它是這個尺寸:

uint64_t N; 
N = 2147483648; // N = 2*2^30 
plhs[0] = mxCreateNumericMatrix(N,1,mxUINT8_CLASS,mxREAL); 

前面的代碼引發錯誤:

maximum variable size allowed by the function exceeded 

這是令人困惑,因爲我的系統(運行64位Matlab 2010b的64位Linux)告訴我最大的數組大小實際上非常大。

[~,M] = computer 
M = 
    281474976710655 % 2^48 -1 for those of you keeping track 

此外,在命令行中,我能夠創造非常大的陣列,並且已經相當愉快的一段時間,通過類似以下的調用:

a = zeros(16*2^30,1,'uint8'); 
disp(uint64(numel(a))) 
17179869184 

我的問題是,爲什麼我無法在我的mex函數中創建數組,我很明顯可以從命令行或其他* .m函數創建數組?

謝謝。

P.S. - 我也在Mathworks論壇上提過這個問題。我想我會盡可能大的網。如果首先在那裏回答,我會在這裏發佈。

回答

2

答案在於編譯器選項。默認情況下,Matlab將大小限制爲2^31-1。要增加尺寸,mex編譯命令中必須包含以下選項。

mex -largeArrayDims myFunction.c 
+0

我不知道爲什麼這還沒有成爲64位MATLAB安裝的默認值。 – chappjc