C++ 热路径的分析和std::vector部分?

C++ 热路径的分析和std::vector部分?,c++,vector,std,sfml,C++,Vector,Std,Sfml,我正试图找到我的应用程序性能问题的根源。使用Visual Studio 2017评测工具,我得到了以下结果: 我对C++是比较新的,因此我不确定这个 STD::vector::运算符[]/Cord>是或如果这真的是我程序中的瓶颈。感谢您的帮助 这是我的密码: 在人生的游戏中,你要做的是阅读状态来做出决定。当然,大部分时间都是这样 由于虚拟地址空间中std向量的std向量,您的访问几乎是随机的。一个带有跨度向量的单个缓冲区将显著改善内存的局部性 如果在这些位置保留0或1,则使用+=而不是分支可

我正试图找到我的应用程序性能问题的根源。使用Visual Studio 2017评测工具,我得到了以下结果:

我对C++是比较新的,因此我不确定这个<代码> STD::vector::运算符[]/Cord>是或如果这真的是我程序中的瓶颈。感谢您的帮助

这是我的密码:

在人生的游戏中,你要做的是阅读状态来做出决定。当然,大部分时间都是这样


由于虚拟地址空间中std向量的std向量,您的访问几乎是随机的。一个带有跨度向量的单个缓冲区将显著改善内存的局部性

如果在这些位置保留0或1,则使用
+=
而不是分支可能会有所帮助

bool的向量也是压缩位;这使得访问速度变慢。使用simpke算法,单个字节的向量可能会更快


请注意,生活中的奇特游戏使用基于区域的散列来跳过大区域中的帧。

简短建议:不要使用
std::vector
。它对空间进行了大量优化,而不是对速度进行优化。每次调用
操作符[]
,都会创建一个新的代理对象。考虑使用别的东西。甚至
std::vector
也应该更快。只需存储代码< <代码> 0和<代码> 1 > <代码> s为<代码> false 和<代码>真< /代码>。考虑您可以从那里缓存什么,特别是代码> Word。siz())<代码> >代码> Word(0)。我也会看到改变<代码> STD::fMOD很多看似不必要的转换。也考虑使用一个向量而不是向量向量,你可以自己做基于坐标的访问,并且会节省额外的间接级别<代码> STD::vector::运算符[]/COD>是(其中之一)编写
world[newX][newY]
时调用的函数。这与编写
world.operator[](newX).operator[](newY)
@KyleV是一样的<代码>%或一些内联的
函数。尽管在查看了
%
std::fmod
的性能后,我仍然希望
%
在大多数情况下都会更好,但这取决于所使用的特定硬件,所以可能它比我想象的更像是一个微观优化。“一个带有跨距向量的单个缓冲区将显著改善内存位置。”我如何实现这样的功能?感谢帮助!@kyle查找gsl span.
std::vector data(width*height);
用于存储。
std::vector
用于访问。跨距是一个指针和一个覆盖
[]的长度
和迭代看起来有点像一个容器,但它什么都没有。