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
私の質問は、コマンド ラインまたは他の *.m 関数から明らかに作成できる配列を mex 関数で作成できないのはなぜですか?
ありがとうございました。
PS - Mathworks フォーラムでもこの質問をしました。できるだけ大きな網を投げようと思いました。最初に回答があれば、ここに投稿します。