我必须创建一个大矩阵(即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;
}
}
我的分配和初始化是否正确?
按照我上面的方式分配数组和浮动DynamicMatrix [10,000] [10,000]之类的内容有什么区别?
答案 0 :(得分:0)
声明
float DynamicMatrix[10000][10000];
在堆栈上声明10000 x 10000个连续存储浮点数。这可能是您的机器可能无法在一个块中实现的高级订单。对于大多数具有4字节浮点数的计算机,可以处理400 MB的数据。
另一方面,在指向向量的指针数组中,每一行数据都在堆上单独分配。这对于分配器来说可能更容易实现。另一方面,连接存储在访问方面可以非常快。