c++ - 在 C++ 循环中,重用大型数据结构并重置内容或分配新内容,哪个更快?

标签 c++ performance loops opencv memory-management

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

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

最佳答案

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

但是,正如其他人指出的,您应该测量时间。有时性能差异非常小,您最好以更清晰、更易于理解的方式编写代码。

关于c++ - 在 C++ 循环中,重用大型数据结构并重置内容或分配新内容,哪个更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25271312/

相关文章:

database - 如何调试这个 Hibernate/JPA 慢查询问题?

c++ - 排序一个vector,然后放入AVL树,还是直接输入哪个更快?

javascript - For循环取javascript中对象属性的平均值

c++ - 如何使用 Visual C++(非 C++/CLI)处理 .mdb 数据库?

c++ - 错误 : use of deleted function ‘std::thread::thread(const std::thread&)'

r - 查找与值关联的子组并计算每个 ID 中的连续子组

python - Axes3D.text() 注释 3D 散点图

C++ 如何检查多输入语句的第一个输入?

c++ - Bison 和用户类 : compiling error

c++ - 用 new int[10] 分配的内存必须用 delete[] 释放