2013-10-10 3 views
0

MEX 함수에서 행렬을 만들려고합니다. 다음 작품 :mxCreateNumericMatrix 최대 크기가 시스템 최대 배열 크기보다 작은 이유는 무엇입니까?

maximum variable size allowed by the function exceeded 

때문에 혼란 : 위의 코드는 오류가 발생

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

그러나

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

, 나는이 크기 배열을 만들 수 없습니다입니다 필자의 시스템 (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 

내 질문은, 왜 커맨드 라인이나 다른 * .m 함수에서 만들 수있는 mex 함수로 배열을 생성 할 수 없습니까?

감사합니다.

P. - Mathworks 포럼에서이 질문을했습니다. 나는 가능한 한 큰 그물을 던질 것이라고 생각했다. 먼저 대답을하면 여기에 게시하겠습니다.

답변

2

대답은 컴파일러 옵션에 있습니다. 기본적으로 Matlab은 크기를 2^31-1로 제한합니다. 크기를 늘리려면 다음 옵션이 mex compile 명령에 포함되어야합니다.

mex -largeArrayDims myFunction.c 
+0

이것이 64 비트 MATLAB 설치의 기본값으로 아직 설정되지 않은 이유를 모르겠습니다. – chappjc

관련 문제