fab*_*ioM 10 c c++ string algorithm
挑战在于找到使用C中的按位运算在C/C++中确定c-string长度的最快方法.
char thestring[16];
Run Code Online (Sandbox Code Playgroud)
c-string的最大大小为16个字符,位于缓冲区内.如果字符串等于16个字符,则末尾没有空字节.
我相信可以做到,但还没有做到.
我目前正在研究这个问题,但假设字符串是在零填充缓冲区上进行memcpied .
len = buff[0] != 0x0 +
buff[1] != 0x0 +
buff[2] != 0x0 +
buff[3] != 0x0 +
buff[4] != 0x0 +
buff[5] != 0x0 +
buff[6] != 0x0 +
buff[7] != 0x0 +
buff[8] != 0x0 +
buff[9] != 0x0 +
buff[10] != 0x0 +
buff[11] != 0x0 +
buff[12] != 0x0 +
buff[13] != 0x0 +
buff[14] != 0x0 +
buff[15] != 0x0;
Run Code Online (Sandbox Code Playgroud)
注意:缓冲区为零填充 "\ 0123456789abcde"不可能发生.
这会工作得很好,因为buf初始化为零。您的解决方案!=将使用跳转指令。如果 GPU 有多个 XOR 单元,则可以很好地对以下代码进行流水线处理。另一方面,JUMP指令会导致管道的刷新。
len = !!buf[0] +
!!buf[1] +
//...
!!buf[15]
Run Code Online (Sandbox Code Playgroud)
更新:当带有标志的 GCC 编译时,上面的代码和 OP 的代码产生相同的汇编代码-O3。(如果没有提供优化标志则不同)
| 归档时间: |
|
| 查看次数: |
1086 次 |
| 最近记录: |