我需要为一个代表三角矩阵的非常大的数组分配内存。 我编写了以下代码:
const int max_number_of_particles=20000;
float **dis_vec;
dis_vec = new float **[max_number_of_particles];
for (i = 0; i<max_number_of_particles; i++)
dis_vec[i] = new float *[i];
for (i = 0; i<max_number_of_particles; i++)
for (j = 0; j<i; j++)
dis_vec[i][j] = new float[2];
问题在于,随着矩阵大小的增加,执行此操作(分配内存)所需的时间会迅速增加。有谁知道这个问题的更好解决方案吗?
谢谢。
最佳答案
分配一维数组并将索引转换为下标,反之亦然。与 O(N)
相比的一项分配分配应该快得多。
编辑
具体来说,只需分配 N(N+1)/2
元素,以及当您想要访问 [r][c]
时在原文中,只需访问 [r*(r+1)/2 + c]
相反。
关于c++ - 如何加快C++中2D三角矩阵的内存分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4256986/