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 포럼에서이 질문을했습니다. 나는 가능한 한 큰 그물을 던질 것이라고 생각했다. 먼저 대답을하면 여기에 게시하겠습니다.
이것이 64 비트 MATLAB 설치의 기본값으로 아직 설정되지 않은 이유를 모르겠습니다. – chappjc