小编J. *_*ond的帖子

快速按字节替换if

我有一个函数可以将二进制数据从一个区域复制到另一个区域,但前提是字节与特定值不同.这是一个代码示例:

void copy_if(char* src, char* dest, size_t size, char ignore)
{
  for (size_t i = 0; i < size; ++i)
  {
    if (src[i] != ignore)
      dest[i] = src[i];
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是这对我目前的需求来说太慢了.有没有办法以更快的方式获得相同的结果?

更新: 基于答案我尝试了两个新的实现:

void copy_if_vectorized(const uint8_t* src, uint8_t* dest, size_t size, char ignore)
{
    for (size_t i = 0; i < size; ++i)
    {
        char temps = src[i];
        char tempd = dest[i];
        dest[i] = temps == ignore ? tempd : temps;
    }
}

void copy_if_SSE(const uint8_t* src, uint8_t* dest, size_t …
Run Code Online (Sandbox Code Playgroud)

c optimization x86 sse simd

8
推荐指数
2
解决办法
435
查看次数

标签 统计

c ×1

optimization ×1

simd ×1

sse ×1

x86 ×1