【发布时间】:2015-03-05 13:36:31
【问题描述】:
虽然我欢迎在一般范围内回答这个问题,但我主要要求 avr-gcc 使其不要太宽泛。
我查看了一些问题,尤其是this 和this 之一。他们主要关注语义差异,例如static const 不能用来代替常量表达式。但是,虽然一般都在谈论内存分配,但他们并没有谈论优化。
我们来看一个例子:
typedef struct {
GPIO_TypeDef *port;
uint8_t pin;
} gpio_pin_t;
static inline void gpio_pin_set(gpio_pin_t gpio, bool set) {
if(set) GPIO_SetBits (gpio.port, 1 << gpio.pin);
else GPIO_ResetBits(gpio.port, 1 << gpio.pin);
}
//elsewhere including above definitions
static const gpio_pin_t gpio_pin = {GPIOE, 8};
void some_function(bool enable) {
gpio_pin_set(gpio_pin, enable);
}
如你所见,我使用的是结构体,所以第三种既定方式(枚举)在这里不是一个选项
我可以期望 gcc 优化内联函数中的 gpio.port 和 gpio.pin 访问吗?如果不是,为什么会这样,gcc 在看到 const 时会应用其他优化吗?
总的来说,使用static const 变量而不是定义会在优化方面失去什么,尤其是超越简单的整数常量?
【问题讨论】:
标签: c gcc optimization macros constants