最大化C中的自动内联

时间:2015-09-04 02:05:19

标签: c inline

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

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;                   
}

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

// 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;                   
}

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

注意:我试图确定速度的最佳自动内联练习,而不是解决这个具体的例子。

2 个答案:

答案 0 :(得分:2)

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

如果在标题中创建static inline,则(a)编译器不会抱怨未使用的函数,(b)您将获得内联的最大可用优势。

我假设你的编译器至少支持旧的(C99)标准,如果不是新的(C11)标准。如果你的编译器只支持古老的(C89 / C90)标准(让我们面对它,一个四分之一世纪的标准),那么你就没有这么简单的选择 - 除非它有' sa非标准的编译器扩展,将大致相同的魔术。

另见:

答案 1 :(得分:-3)

如果可以,请使用inline。我觉得这就是它的用途。