在c++循环中,重用大型数据结构并重置内容或分配新的,这样更快

In C++ loops, reuse large data structures and reset content or allocate new, which is faster?

本文关键字:分配 循环 c++ 大型 数据结构      更新时间:2023-10-16

在循环外分配大型数据结构(如OpenCV图像或std:vector)是否更快,这些结构在循环的每次迭代中使用,但需要重置(例如设置OpenCV Mat为Scalar(0))?还是应该在循环中实例化一个新的?

编辑:我正在寻找一个经验法则,如果创建一个包含零的新的默认构造的OpenCV Mat,与在每个循环中重置Mat一样快,更快或更慢。如果有太多不同的编译器行为影响结果,那么必须对其进行测量,这也是我想要的答案。感谢大家,谁给这个想法!

分配新空间通常是一个昂贵的操作,所以如果可能的话,总是在循环之外进行分配并重用该空间。在某些情况下,您甚至不需要在再次使用它之前将矩阵归零(例如,如果您要设置矩阵的所有元素)。

然而,正如其他人指出的,你应该测量时间。有时候,性能差异是如此之小,以至于您最好以更清晰、更容易遵循的方式编写代码。