c - 高效内存

标签 c assembly strchr

有谁知道 memcspn 函数的有效实现?它应该表现得像 strcspn,但在内存缓冲区中查找跨度,而不是在空终止字符串中查找。目标编译器是 visualC++。

谢谢, 卢卡

最佳答案

一个接近最优的实现:

size_t memcspan(const unsigned char *buf, size_t len, const unsigned char *set, size_t n)
{
    size_t i;
    char set2[1<<CHAR_BIT] = {0};
    while (n--) set2[set[n]] = 1;
    for (i=0; i<len && !set2[buf[i]]; i++);
    return i;
}

对于 set2 使用位数组而不是字节数组可能更好,这取决于算术或更多缓存抖动在您的机器上是否更昂贵。

关于c - 高效内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3602534/

相关文章:

assembly - 获得汇编语言编程技能

c - 需要帮助在给定 64 位汇编指令的情况下在 C 中构建 Long loop(long x, int n) 函数

c - C 字符串中非空白字符的第一个索引

C strchr 在 valgrind 中导致 "Invalid read of size 1"

c - 如何在 C (Windows) 中打印方框字符

c - GCC 内联汇编语言中的 r() 和双百分号 %% 是什么?

c - 如何使用Cgreen在精度范围内进行测试?

c - strchr() 在看似没有的地方找到 '\n'

c - 如何在没有 FPU 的机器上计算 float

c - 将整数读取为字符并将其打印为整数