作为项目的一部分,我需要在一个大循环内进行掩码计算(大约 10^6 到 10^7 次重复)。我需要保留任意数量的最低有效位(1-8),或特定位置的任何位(7-0,其中 7 是最高有效位)。为了不在主代码中计算 Masks - 并且为了性能,我提出了以下想法(在每种情况下,参数都是从 0 到 7 的无符号字符):
1)使用头文件中定义的两个全局数组(比如bitops.h):
char mask[8] = {1, 3, 7, 15, 31, 63, 127, 255};
char position[8] = {1, 2, 4, 8, 16, 32, 64, 128};
由于内存延迟,我们可能不得不等待。
2)使用简单的操作(通过宏)计算掩码:
#define mask(x) ((1 << (x + 1)) - 1)
#define position(x) (1 << x)
我们将需要大约 3 个时钟周期用于掩码,而仅需要 1 个时钟周期用于位置。
你有什么建议?第二个选项实际上更快,还是如果我选择第一个,处理器会提前缓存常量?
谢谢你的时间!