当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《对于按位NOT运算,哪个更快:预先计算的表或`~`》经验,为你挑选了1个好方法。

从理论上讲,现代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(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> user207421..:

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

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


@ ThomasPadron-McCarthy它会有一个NOT指令,或者最坏的情况下你可以做`XOR 0xff`,两者都会比给定的替代方案更快.
@vladon - 你必须计算`table [arg]`来获取一个地址,然后阅读.这不能比计算`arg op constant`然后*不*从内存(或缓存)读取更快.
推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有