在循环外分配大型数据结构(例如 OpenCV 图像或 std:vectors)是否更快,这些数据结构在循环的每次迭代中使用,但需要重置(例如将 OpenCV Mat 设置为 Scalar(0))?或者应该在循环内实例化一个新的?
编辑: 我正在寻找一条经验法则,如果创建一个包含零的新的默认构造 OpenCV Mat 与在每个循环中重置 Mat 一样快、更快或更慢。如果有太多不同的编译器行为影响结果,那么就必须对其进行测量,这也将是我一直在寻找的答案。感谢所有对此进行思考的人!
最佳答案
分配新空间通常是一项昂贵的操作,因此如果可能的话,请始终在循环之外进行分配并重用该空间。在某些情况下,您甚至不需要在再次使用矩阵之前将其清零(例如,如果您要设置矩阵的所有元素)。
但是,正如其他人指出的,您应该测量时间。有时性能差异非常小,您最好以更清晰、更易于理解的方式编写代码。
关于c++ - 在 C++ 循环中,重用大型数据结构并重置内容或分配新内容,哪个更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25271312/