【发布时间】:2011-02-09 18:48:02
【问题描述】:
挑战是找到在 C/C++ 中使用 C 中的按位运算确定 c 字符串长度的最快方法。
char thestring[16];
c 字符串的最大大小为 16 个字符,并且位于缓冲区内 如果字符串等于 16 个字符,则末尾没有空字节。
我确信可以完成,但还没有做对。
我目前正在处理这个问题,但假设字符串是在 zero-filled 缓冲区上存储的。
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”不可能发生。
【问题讨论】:
-
位运算符对某些人有什么奇怪的魅力?
-
@Neil:Speeeed,适用于 GPU 内核,内核上少一条指令 == 设备上少一千条指令
-
@GMan - Nvidia 的一个,从 1.0 到 2.0 的所有计算能力
-
@fabrizio 您似乎假设使用 C 或 C++ 位运算符会转换为单个 CPU/GPU 操作。
-
@fabrizioM:简单地编写低级代码不保证“速度”。通常,它会为您提供 1) 错误,以及 2) 如果您只是在高层次上表达了您的意图,编译器可以提供的代码慢。