首页 > 解决方案 > 静态内联 vs -finline-functions

问题描述

语境:

我正在用 C 编写一个模块,它定义了一些非常短的函数。我的直觉是static inline在 .h 文件中声明它们,但是......

问题:

我了解 -O2 及更高版本的 GCC 可以选择内联函数,无论它们是否定义为静态和/或内联。鉴于此,在什么情况下您会static inline在 .h 文件中显式声明一个函数?

[FWIW,我倾向于相信编译器......]

为了使其具体化(省略#includes 和guards 等):

版本 A:内联声明

// File: bvec.h

static inline void bvec_set(size_t bit_index, uint8_t *store) {
  store[bit_index >> 3] |= (1 << bit_index & 0x7);
}

static inline void bvec_clear(size_t bit_index, uint8_t *store) {
  store[bit_index >> 3] &= ~(1 << bit_index & 0x7);
}

// File: bvec.c
// (empty)

版本 B:相信编译器的-finline-functions

// File: bvec.h

void bvec_set(size_t bit_index, uint8_t *store);

void bvec_clear(size_t bit_index, uint8_t *store);

// File: bvec.c

void bvec_set(size_t bit_index, uint8_t *store) {
  store[bit_index >> 3] |= (1 << bit_index & 0x7);
}

void bvec_clear(size_t bit_index, uint8_t *store) {
  store[bit_index >> 3] &= ~(1 << bit_index & 0x7);
}

标签: coptimization

解决方案


推荐阅读