c++ - 如何帮助编译器根据输入的约束优化我的程序?

标签 c++ c optimization constraints compiler-optimization

我在 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/

相关文章:

c++ - 在没有 OpenCV 的情况下从 C++ 中的 RGB 数组拆分 channel

c++ - 用于平铺矩阵乘法的 AVX 内在函数

algorithm - 寻找图像匹配的边缘对应关系

c++ - 'islower' 的无效重载

c++ - 从Lambda启动异步任务会阻止当前线程C++

c - 获取指向我的 XDisplay (Linux) (X) 的指针?

c - 邻接矩阵查找邻居

正确的括号

c++ - 如何在类空间中为成员函数起别名?

c++ - VS2012 SP1(+11 月包)未知类型错误(如 C::a(T &&...) )