方阵的分配时间 我正在研究C++中的一个项目,需要在一个中等的邻接矩阵上执行一些路径查找。这些计算大约每分钟进行一到两次,V的典型值可能高达10000

方阵的分配时间 我正在研究C++中的一个项目,需要在一个中等的邻接矩阵上执行一些路径查找。这些计算大约每分钟进行一到两次,V的典型值可能高达10000,c++,matrix,allocation,adjacency-matrix,C++,Matrix,Allocation,Adjacency Matrix,我主要关心的是计算时间性能,而不是内存性能 这里的图形始终是对称的,因此我知道仅使用矩阵的一个三角形可以节省一些空间,但我的问题仍然是: 我怎么知道在什么情况下,将这个大数组保留在内存中并将所有单元格归零会比持续分配、使用和取消分配数组更快?这里是否有我不知道的缓解因素?您是否尝试过测量它?在一个循环中运行整个allocate/deallocate几千次,测量它需要多长时间,以及测量平均值。然后检查当每分钟做几次时,该时间是否明显。我的猜测是,它不会大到足以让人担心的程度,您所做的处理将是您在测

我主要关心的是计算时间性能,而不是内存性能

这里的图形始终是对称的,因此我知道仅使用矩阵的一个三角形可以节省一些空间,但我的问题仍然是:


我怎么知道在什么情况下,将这个大数组保留在内存中并将所有单元格归零会比持续分配、使用和取消分配数组更快?这里是否有我不知道的缓解因素?

您是否尝试过测量它?在一个循环中运行整个allocate/deallocate几千次,测量它需要多长时间,以及测量平均值。然后检查当每分钟做几次时,该时间是否明显。我的猜测是,它不会大到足以让人担心的程度,您所做的处理将是您在测量和分析之后需要考虑可能的优化的部分。不要做过早的优化。我肯定会衡量这一点。事实上,我提交这个问题主要是为了得到比我聪明的人的意见。据我所知,由于组织政治和其他原因,我可能无法显著改进对数据的处理。仅供参考:分配一块内存是O(1)。分配内存不会以任何方式处理内存(除非您要求它使用旧的C
calloc
函数),因此分配本身非常快速。如果动态分配指针数组(即
int**
),则需要一个循环来分配指向O(n)的内部数组。复杂性也取决于你分配的东西,因为你在C++中编程,如果你分配对象,可能会有构造函数和被调用的东西。解除分配也是如此(当然也叫析构函数)。你试过测量它吗?在一个循环中运行整个allocate/deallocate几千次,测量它需要多长时间,以及测量平均值。然后检查当每分钟做几次时,该时间是否明显。我的猜测是,它不会大到足以让人担心的程度,您所做的处理将是您在测量和分析之后需要考虑可能的优化的部分。不要做过早的优化。我肯定会衡量这一点。事实上,我提交这个问题主要是为了得到比我聪明的人的意见。据我所知,由于组织政治和其他原因,我可能无法显著改进对数据的处理。仅供参考:分配一块内存是O(1)。分配内存不会以任何方式处理内存(除非您要求它使用旧的C
calloc
函数),因此分配本身非常快速。如果动态分配指针数组(即
int**
),则需要一个循环来分配指向O(n)的内部数组。复杂性也取决于你分配的东西,因为你在C++中编程,如果你分配对象,可能会有构造函数和被调用的东西。解除分配也是如此(当然,也会调用析构函数)。