Arrays 为什么mxCreateNumericMatrix最大大小小于系统最大数组大小?

Arrays 为什么mxCreateNumericMatrix最大大小小于系统最大数组大小?,arrays,matlab,mex,Arrays,Matlab,Mex,我试图在MEX函数中创建一个矩阵。以下工作: 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); 前面的代

我试图在MEX函数中创建一个矩阵。以下工作:

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函数创建的数组

多谢各位


我在Mathworks论坛上也问过这个问题。我想我应该尽可能地撒一个大网。如果先在那里得到答案,我会把它贴在这里。

答案在编译器选项中。默认情况下,Matlab将大小限制为2^31-1。要增加大小,mex编译命令中必须包含以下选项

mex -largeArrayDims myFunction.c

我不知道为什么这还没有成为64位MATLAB安装的默认设置。