gpt4 book ai didi

c++ - 使用按位运算符的 MAX 16 个字符字符串的 Strlen

转载 作者:可可西里 更新时间:2023-11-01 15:52:56 29 4
gpt4 key购买 nike

挑战在于找到在 C/C++ 中使用 C 中的按位运算确定 C 字符串长度的最快方法。

char thestring[16];

c 字符串的最大长度为 16 个字符,并且位于缓冲区内如果字符串等于 16 个字符,则末尾没有空字节。

我确定可以完成,但还没有做对。

目前我正在处理这个问题,但假设字符串存储在零填充缓冲区中。

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;

注意:缓冲区零填充“\0123456789abcde”不可能发生。

最佳答案

这会工作得很好,因为 buf 初始化为零。您的解决方案有 != ,它将使用跳转指令。如果 GPU 有多个 XOR 单元,则可以很好地流水线化以下代码。另一方面,JUMP 指令会导致流水线的刷新。

len = !!buf[0] +
!!buf[1] +
//...
!!buf[15]

更新:上面的代码和OP的代码在GCC用-O3编译时产生了相同的汇编代码 标志。 (如果没有提供优化标志则不同)

关于c++ - 使用按位运算符的 MAX 16 个字符字符串的 Strlen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2669191/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com