对于按位NOT运算,哪个更快:预先计算的表或`~`

时间:2015-12-15 07:13:13

标签: c++ theory cpu-cache

理论上,现代CPU更快:

  • 从表
  • 收到NOT结果
  • 或按~(在C中)操作计算?

假设所有表都适合L1缓存。

按位不:

uint8_t bitwise_not(uint8_t arg) { return ~arg; }

表不是:

// precalculcating table (once)
uint8_t table[0x100];
for (int i = 0; i < 0x100; ++i) { table[i] = ~static_cast<uint8_t>(i); }

// function
uint8_t table_not(uint8_t arg) { return table[arg]; }

// xor_not:
uint8_t xor_not(uint8_t arg) { return arg ^ 0xff; }

在没有单个操作但数十亿次操作的情况下,是否比任何逻辑操作更快地从L1缓存中读取? (我认为L1更快,但无法证明。)

实际上,如何衡量它?

1 个答案:

答案 0 :(得分:11)

都不是。只需在代码中使用〜运算符内联。它是一台机器指令。函数调用或表查找有几个。没有办法可能更快。

我无法解释您的奇怪信念,即L1缓存比寄存器更快。