此问题在此处已有答案:
Most insanely fast way to convert 9 char digits into an int or unsigned int(3个答案)
去年关闭。
这是我的想法
len
保证具有有意义的值(char数组的正和真实大小)s
是一个长的无符号数字,作为一个字符串,没有空终止(从第三方lib接收),通常有11-12个符号,例如“123456789000”- 运行在x86 Linux上
我不是C++开发人员,你能帮助使它更快吗?
inline uint64_t strtol(char* s, int len)
{
uint64_t val = 0;
for (int i = 0; i < len; i++)
{
char c = *(s + i) - '0';
val = val * 10 + c;
}
return val;
};
字符串
1条答案
按热度按时间lh80um4z1#
你可能想看看循环展开。当循环体足够短时,每次迭代检查循环条件可能相对昂贵。
实现循环展开的一种特殊而有趣的方法称为Duff's device。
以下是您的函数的版本:
字符串
老实说,在你的情况下,我相信你不会看到很大的好处,因为循环的主体并不那么小。它非常依赖于系统,需要实验(像大多数优化一样)。好的编译器优化器可能会自动展开循环,如果它真的有用的话。
但值得一试。