我在 C 中实现了类似于以下设置 GPIO 引脚的东西:
void f(int pin) {
bank[pin/32] = 1 << (pin%32);
}
现在,我知道为这个函数提供小于 0 或大于 63 的值是未定义的行为(bank
周围的寄存器被读取为垃圾),因此这段代码可以视为等效:
void f(int pin) {
bank[pin > 31] = 1 << (pin - 32*(pin>31));
}
我对我的架构了解不够,无法确定哪一个将转换为最高效的机器代码,这只是跨多个平台的众多此类功能示例之一。但是,如果我能以某种方式指示我的编译器假设 0 <= pin < 64,那么理论上它可以为我选择上述实现中最有效的实现。
有没有办法通知编译器在优化过程中可能有益的约束?
最佳答案
你可以让 pin 成为一个位域结构:
struct Pin
{
unsigned int pin : 6; // can hold values up to 64
};
关于c++ - 如何帮助编译器根据输入的约束优化我的程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28007678/