0

我必须创建一个大矩阵(即 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个连续存储的浮点数。这可能是一项艰巨的任务,您的机器可能无法一次性完成。对于大多数具有 4 字节浮点数的机器,可以计算出 400 MB 的数据。

另一方面,在指向向量的指针数组方法中,每一行数据都单独分配在堆上。这对于分配器来说可能更容易实现。另一方面,连续存储在访问方面可能非常快。

于 2013-10-28T18:41:22.350 回答