【发布时间】:2019-02-17 22:30:32
【问题描述】:
我正在尝试找出我的应用程序出现性能问题的根源。使用 Visual Studio 2017 分析工具,我得到了以下结果:
我对 C++ 比较陌生,所以我不确定 std::vector<bool,std::allocator<bool> >::operator[] 是什么东西,或者这是否真的是我程序的瓶颈。任何帮助表示赞赏。
这是我的代码: https://github.com/k-vekos/GameOfLife/tree/multithread
【问题讨论】:
-
简短建议:不要使用
std::vector<bool>。它针对空间进行了高度优化,而不是针对速度进行了优化。每次调用operator[]时,都会创建一个新的代理对象。考虑使用其他东西。即使std::vector<uint8_t>也应该更快。只需将0s 和1s 存储为false和true。 -
考虑一下你可以在那里缓存什么,特别是
world.size()&world[0].size()。我还会考虑更改std::fmod,很多看似不必要的转换。 -
还可以考虑使用单个向量而不是向量的向量,您可以自己进行基于坐标的访问,这样可以节省额外的间接层级
-
std::vector<bool,std::allocator<bool> >::operator[]是您在编写world[newX][newY]时调用的函数之一。和写world.operator[](newX).operator[](newY)一样 -
@KyleV。
%或一些inline函数。虽然老实说,在查看了%的性能而不是std::fmod之后,我仍然希望%在大多数情况下会更好,但这取决于所使用的特定硬件,所以也许它更像是一个微-优化比我想象的要好。