为啥 mxCreateNumericMatrix 最大尺寸小于系统最大数组尺寸?
Posted
技术标签:
【中文标题】为啥 mxCreateNumericMatrix 最大尺寸小于系统最大数组尺寸?【英文标题】:Why is mxCreateNumericMatrix maximum size smaller than system maximum array size?为什么 mxCreateNumericMatrix 最大尺寸小于系统最大数组尺寸? 【发布时间】:2013-10-10 18:04:53 【问题描述】:我正在尝试在 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 论坛上问过这个问题。我想我会撒一张尽可能大的网。如果先在那里回答,我会在这里发布。
【问题讨论】:
【参考方案1】:答案在于编译器选项。默认情况下,Matlab 将大小限制为 2^31-1。要增加大小,必须在您的 mex 编译命令中包含以下选项。
mex -largeArrayDims myFunction.c
【讨论】:
我不知道为什么这还没有成为 64 位 MATLAB 安装的默认设置。以上是关于为啥 mxCreateNumericMatrix 最大尺寸小于系统最大数组尺寸?的主要内容,如果未能解决你的问题,请参考以下文章
为啥使用 glTranslatef?为啥不直接更改渲染坐标?
为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?