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);