在CPU消耗方面,使用位运算在运行时移位,还是将所有可能的值存储在数组中,哪种更好?
在CPU消耗方面,使用位运算在运行时移位,还是将所有可能的值存储在数组中,哪种更好?
我正在使用Arduino平台上的C++代码编写ESP8266 MCU,并尽可能地使我的代码更加高效。
为了通过I2C操作其他MCU,需要配置其内部存储8位的寄存器。为了设置位的开/关,我使用按位掩码。
一种方法是通过移位位并应用比特位&(and)掩码来实现。详情请参阅将第i位设置为零?。
但我还可以将所有可能的移位一的8个值存储在数组中,直接访问它们而不进行位移。
像这样:
const unsigned int PINS[8] = {0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80}; ... pt = pt & ~(PINS[i]);
而不是:
pt = pt & ~(1 << i);
我认为这取决于MCU的编译器如何工作而可能更糟糕。通过索引访问数组的成本更高吗?数组值将在cpu寄存器中吗?我是不是过多地进行了优化?还有其他选择吗?
您能帮我解决这个问题吗?
admin 更改状态以发布 2023年5月22日