繁体   English   中英

解引用字符串迭代器和性能影响

[英]Dereferencing string iterator and performance impact

取消引用字符串迭代器是否会对性能产生重大影响?

我有一个循环运行多次(C ++)

for (string::const_iterator it = myString.begin; it != myString.end(); it++) {
    do lots of things on *it;
}

而且由于我不知道(也找不到)如何为字符串:: const_iterator实现*运算符,所以我想知道是否使用char a = *比* it更好。

除非使用的是库的调试版本,否则字符串迭代器只不过是一个指针,而对其进行取消引用就应该仅取消对该指针的引用。

指针很可能被包装在一个类类型中(尽管这不是必需的;指针本身将构成一个有效的迭代器)。 但这不会增加任何开销。

与指针一样,您可以从保存其目标的本地副本中受益,因为可以将其放置在寄存器中。 但是如果编译器可以看到内存中的值不会更改,则无论如何还是可以进行优化。 确保哪种更好的唯一方法是尝试两种变体,然后进行测量和/或研究生成的装配体。

对于字符串,迭代器(通常)仅在释放模式下解析为指针(与向量迭代器相同)。 任何值得付出代价的编译器都将保留此引用,因此从理论上讲,性能影响应该是不存在的。 但是,经验法则是:如有疑问,请衡量。

是allin释放模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM