0

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 フォーラムでもこの質問をしました。できるだけ大きな網を投げようと思いました。最初に回答があれば、ここに投稿します。

4

1 に答える 1