8

128 GB の RAM を搭載した 64 ビット PC を使用しており、C# と .NET 4.5 を使用しています。私は次のコードを持っています:

double[,] m1 = new double[65535, 65535];
long l1 = m1.LongLength;

double[,] m2 = new double[65536, 65536]; // Array dimensions exceeded supported range
long l2 = m2.LongLength;

私は知っていて、<gcAllowVeryLargeObjects enabled="true" />それをtrueに設定しました。

多次元配列の要素数が 4294967295 を超えないのはなぜですか? 次の回答を見ましたhttps://stackoverflow.com/a/2338797/7556646

gcAllowVeryLargeObjectsのドキュメントも確認したところ、次のコメントがありました。

配列の要素の最大数はUInt32.MaxValue (4294967295) です。

なぜこの制限があるのか​​ 理解できませんか?回避策はありますか? .net の今後のバージョンでこの制限を削除する予定はありますか?

インテル® MKL を使用して対称固有値分解などを計算したいので、メモリ内にその理由の要素が必要です。

[DllImport("custom_mkl", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true, SetLastError = false)]
internal static extern lapack_int LAPACKE_dsyevd(
    int matrix_layout, char jobz, char uplo, lapack_int n, [In, Out] double[,] a, lapack_int lda, [In, Out] double[] w);
4

2 に答える 2