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

时间:2013-10-10 18:04:53

标签: 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);

前面的代码抛出错误:

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论坛中提出了这个问题。我想我会尽可能地投出大网。如果先在那里回答,我会在这里发布。

1 个答案:

答案 0 :(得分:2)

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

mex -largeArrayDims myFunction.c