gpt4 book ai didi

c++ - 什么在 cpu 成本方面更好?在运行时移位或将所有可能的值存储在数组中?

转载 作者:行者123 更新时间:2023-11-28 01:21:45 26 4
gpt4 key购买 nike

我正在为 Arduino 平台中的 ESP8266 MCU 编写 C++ 代码,我正在努力让我的代码尽可能高效。

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

实现此目的的一种方法是移位位并以这种方式应用按位 &(和)掩码 Set the i-th bit to zero? .

但我也可以将所有 8 个可能的移位值存储在一个数组中,直接访问它们并逐出进行位移。

像这样:

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

...

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

代替:

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

我认为这可能会更糟,具体取决于 MCU 的编译器将如何处理它。通过索引访问数组成本更高?数组值将在 cpu 寄存器中?我是否过度优化?还有其他选择吗?

你能帮我了解一下这个问题吗?

最佳答案

如果您处于(并且需要)这个优化级别,您就需要反编译代码并准确查看编译器构建的内容。

如果您真的想从那里进行优化,我建议您编写一个自定义汇编函数,以确保循环(它处于紧密循环中,对吗?)是最佳的。这很痛苦,但您正在查看的优化是按单个周期的顺序进行的。

即使到那时,这可能也无关紧要,像循环展开这样的优化将比两次快速操作更重要。

关于c++ - 什么在 cpu 成本方面更好?在运行时移位或将所有可能的值存储在数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55886446/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com