按位和优化的优化结果

时间:2017-04-24 09:18:51

标签: c++ optimization

我正在读取停止位编码数据流,我需要能够识别具有停止位的字节。

我的代码片段:

    const unsigned char *b; // Pointer to the datastream

    ...

    // Test the sign bit
->  if (*b & 0x40)
    {
        // Negative number, do relevant stuff
        ...
    }

    while(true)
    {
->      if (!(*b & 0x80))
        {
            // Not the stopbit
            ...
        }
        else
        {
            // Reached the stopbit, breaking out of the loop
            ...
            b++;
            break;
        }

        b++;
    }

此功能在紧密循环中运行,需要实时工作。我用箭头标记了探查器显示为" hot"的行,它们是符号位和停止位的测试。

任何想法如何优化这些操作(特别是符号位测试,因为它似乎需要更多时间,即使它不在循环中)?

编辑: 之前应该已经提到过,指针b在循环中使用,因此我不能在while()中迭代。

1 个答案:

答案 0 :(得分:0)

我将while(true)与循环内的(附加)测试结合起来。 但是我不确定这是否真的是问题,因为"而不是停止位" -code很可能比位测试花费的时间更长。

unsigned char c = 1;
while ( !((c=*p++) & 0x80)) {
    // Not the stop bit stuff
    printf ("%d\n", c);
}
// stop bit reached stuff