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/

相关文章:

java - 优化 Java 中的 Ungunzipping 过程?

c++ - std::不适合我

c++ - : Native DLL, UWP DLL 和 C++/CLI DLL 之间的区别

C++ 如何运行 2 boost :asio: io_context at the same time

c - 使用 void 指针和计算的偏移量为结构成员赋值

c - 一种快速测试是否所有数组元素都为零的方法

c++ - 优化稀疏下三角线性系统的反向求解

c++ - “T”不是参数 'T' 的有效模板类型参数

c - 仅在 Visual Studio 中报告 C 警告

mysql - Drupal MySQL 查询优化