最大化 C 中的自动内联

Maximizing automatic inlining in C

我有一个使用联合的变体数据类型。

typedef union { 
    char        *string;
    int         integer; 
    ...
} vardata_t;

我在 variant.c 中有设置值的函数。其中许多功能都很简单。

void variant_set_integer (variant_t *v, int val) { 
    assert (v->vartype == vartype_integer); 
    v->vardata.integer = val;                   
}

如果我希望执行速度尽可能快并优化速度,我的理解是我应该将函数设为静态并将其放在 header 中。

// variant.h
...

// Source files using this may inline via compiler optimizations
// Source files not using this will strip via compiler optimizations
static void variant_set_integer (variant_t *v, int val) { 
    assert (v->vartype == vartype_integer); 
    v->vardata.integer = val;                   
}

这是优化速度的最佳和正确策略,允许编译器最好地利用它确定内联是最佳解决方案的情况吗?

注意:我正在尝试确定速度的最佳自动内联实践,而不是解决这个具体示例。

如果可以,请使用inline。我有一种感觉,这就是它的用途。

如果函数可以static 放在一个文件中,那么就这样做。在 header 中制作它们 static 将意味着您会收到有关未使用函数的编译器警告,除非包含 header 的每个文件也使用这些函数中的每一个。

如果您在 header 中将它们设为 static inline,则 (a) 编译器不会抱怨未使用的函数,并且 (b) 您可以获得内联的最大可用好处。

我假设您的编译器至少支持旧的 (C99) 标准,如果不支持新的 (C11) 标准的话。如果您的编译器仅支持古老的 (C89/C90) 标准(让我们面对现实吧,已有四分之一个世纪的历史),那么您就没有这么简单的选择了——除非有一个 non-standard 编译器扩展这将起到大致相同的作用。

除其他外,另见: