在cpu成本方面,哪个更好?在运行时移位还是将所有可能的值存储在数组中?

我正在为Arduino平台上的ESP8266单片机编写一段C++代码,我正试图让我的代码尽可能高效。

为了通过I2C操作其他单片机,我需要配置他的内部寄存器,存储8位。为了设置位开/关,我使用and位掩码。

要做到这一点,一种方法是移位并应用逐位掩码& ( and )掩码,这样Set the i-th bit to zero?。

但我也可以将移位1的所有8个可能值存储在一个数组中,直接访问它们并清除移位操作。

如下所示:

const unsigned int PINS[8] = {0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80};

...

pt = pt & ~(PINS[i]);

而不是:

pt = pt & ~(1 << i);

我在想,这可能会更糟,这取决于MCU的编译器在这方面的工作方式。通过索引访问数组的成本更高吗?数组值将在cpu寄存器中吗?我是不是夸大了优化?还有其他选择吗?

你能帮助我对这个问题有深刻的见解吗?

转载请注明出处:http://www.jndeho.com/article/20230526/1090002.html