几对性能问题(一个较大的向量与较小的块向量),值得存储迭代索引以进行矢量访问
Couple performance questions (one bigger vector vs smaller chunks vectors) and Is it worth to store iteration index for jump access of vector?
我对矢量优化有些奇怪,并有几个问题。(我仍然是编程的初学者)
示例:
struct GameInfo{
EnumType InfoType;
// Other info...
};
int _lastPosition;
// _gameInfoV is sorted beforehand
std::vector<GameInfo> _gameInfoV;
// The tick function is called every game frame (in "perfect" condition it's every 1.0/60 second)
void BaseClass::tick()
{
for (unsigned int i = _lastPosition; i < _gameInfoV.size(); i++{
auto & info = _gameInfoV[i];
if( !info.bhasbeenAdded ){
if( DoWeNeedNow() ){
_lastPosition++;
info.bhasbeenAdded = true;
_otherPointer->DoSomething(info.InfoType);
// Do something more with "info"....
}
else return; //Break the cycle since we don't need now other "info"
}
}
}
_gameInfoV
向量大小可以在2000
和5000
之间。
我的主要两个问题是:
最好离开它的方式,或者更好地制作较小的块,这对每个不同的
GameInfo.InfoType
都可以检查一下是值得存储向量的最后一个启动位置索引而不是从一开始迭代的麻烦。
请注意,如果使用较小的向量,则会像3 to 6
一样
第三件事可能是我不使用矢量迭代器,但是这样使用是安全的吗?
std::vector<GameInfo>::iterator it = _gameInfoV.begin() + _lastPosition;
for (it = _gameInfoV.begin(); it != _gameInfoV.end(); ++it){
//Do something
}
注意:它将在智能手机中使用,因此在瞄准较弱的手机时,每个优化都将受到赞赏。
- 谢谢
- 不要;除非您经常移动内存
-
如果您正确执行的话,这不是麻烦:
std::vector<GameInfo>::const_iterator _lastPosition(gameInfoV.begin()); // ... for (std::vector<GameInfo>::iterator info=_lastPosition; it!=_gameInfoV.end(); ++info) { if (!info->bhasbeenAdded) { if (DoWeNeedNow()) { ++_lastPosition; _otherPointer->DoSomething(info->InfoType); // Do something more with "info".... } else return; //Break the cycle since we don't need now other "i } }
将一个向量分解为几个较小的向量,总体上并不能提高性能。它甚至可能会稍微降低性能,因为编译器必须管理更多的变量,这些变量需要更多的CPU寄存器等。
我不知道游戏,所以我不了解gameinfo.infotype的含义。如果您通过循环进行更多的总迭代(每个循环迭代执行相同类型的操作),那么您的处理时间和CPU资源要求将会增加。因此,如果分开向量会导致您避免进行一些循环迭代,因为您可以跳过整个向量,这将提高应用程序的性能。
迭代器是通过容器迭代的最安全方法。但是对于矢量,我通常只使用索引运算符和我自己的索引器(一个普通的旧的无符号整数)。
相关文章:
- 尝试通过多个向量访问变量时,向量下标超出范围
- C++从另一个类访问公共静态向量的正确方法是什么
- 访问存储在向量C++中的结构的多态成员
- 如何从静态向量访问类元素?
- 在类 A 中创建类型为 B 类的向量 - 访问数据 [C++] [成员在两个类中都是私有的]
- 从父类的向量访问子类函数,而无需向下转换
- 如何使用常数向量访问成员函数
- 如何从C 向量访问单个单词
- 从C++中传递给函数的指针向量访问矩阵
- 多向量访问与本地对象
- C 迭代器与用于向量访问的指针
- 从向量访问成员功能
- 如何在 c++ 中从 "pointer-to-objects" 向量访问对象
- 如何从双精度向量的向量访问数据
- 从指针向量访问成员函数?C++
- 如何使用SWIG Python从内部向量访问c ++对象方法
- 无法从向量访问对象的getter
- 从向量访问某些类函数C++的问题
- 从基类类型的向量访问派生类方法
- 从对象指针向量访问对象