我正在尝试在 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 函数创建的数组?
谢谢你。
PS - 我也在 Mathworks 论坛上问过这个问题。我想我会撒一张尽可能大的网。如果先在那里回答,我会在这里发布。