0

float ポインターの配列としてスパインを使用して、大きなマトリックス (つまり、10,000x10,000) を作成する必要があります。

 typedef float* DynamicMatrix[MAT_SIZE];
 DynamicMatrix matDyn;

ここで、行を割り当ててゼロに初期化する必要があります。

// allocate rows and initialize to 0
    for (r = 0; r < MAT_SIZE; r++) {
        matDyn[r] = new float[MAT_SIZE];
        for (c = 0; c < MAT_SIZE; c++) {
            matDyn[r][c] = 0;
        }
    }

割り当てと初期化は正しいですか?

上記の方法で配列を割り当てることと、float DynamicMatrix[10,000][10,000] のようなことを言うことの違いは何ですか?

4

1 に答える 1

0

宣言

float DynamicMatrix[10000][10000];

スタック上の連続ストレージの 10000 x 10000 float を宣言します。これは、お使いのマシンが 1 つのチャンクで満たすことができないほどの困難な注文である可能性があります。400 MB のデータになる 4 バイト浮動小数を持つほとんどのマシンの場合。

一方、ベクトルへのポインターの配列アプローチでは、データの各行がヒープ上に個別に割り当てられます。これは、アロケーターが満たすのがより簡単になる場合があります。一方、連続ストレージは、アクセスに関して非常に高速になる可能性があります。

于 2013-10-28T18:41:22.350 に答える