正如标题中提到的,我正在寻找比 atoi 可以给我更多性能的东西。目前,我知道的最快的方法是
atoi(mystring.c_str())
最后,我更喜欢不依赖 Boost 的解决方案。有没有人有很好的性能技巧来做到这一点?
附加信息:int 不会超过 20 亿,它总是正数,字符串中没有小数位。
原文由 user788171 发布,翻译遵循 CC BY-SA 4.0 许可协议
正如标题中提到的,我正在寻找比 atoi 可以给我更多性能的东西。目前,我知道的最快的方法是
atoi(mystring.c_str())
最后,我更喜欢不依赖 Boost 的解决方案。有没有人有很好的性能技巧来做到这一点?
附加信息:int 不会超过 20 亿,它总是正数,字符串中没有小数位。
原文由 user788171 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
我对此处给出的不同功能 + 一些附加功能进行了快速基准测试,默认情况下我将它们转换为 int64_t。编译器 = MSVC。
以下是结果(左 = 正常时间,右 = 扣除间接费用的时间):
DarthGizka 的代码是最快的,并且具有在字符为非数字时停止的优势。
此外,位移“优化”比仅仅做 \* 10 慢一点。
基准测试在伪随机字符串上以 1000 万次迭代运行每个算法,以尽可能限制分支预测,然后重新运行所有算法 15 次以上。对于每个算法,丢弃最慢的 4 个和最快的 4 个时间,给出的结果是 8 个中值时间的平均值。这提供了很大的稳定性。另外,我运行
fast_null
以估计基准测试中的开销(循环 + 字符串更改 + 函数调用),然后在第二个数字中减去这个值。这是函数的代码:
还有我使用的基准代码,以防万一……