如果将 C 函数放在单独的文件中,会出现减速问题吗?

Slowdown issue if C function is placed in a separate file?

我用 C 编写的程序遇到了一些奇怪的减速问题。

我有以下代码:

typedef struct {
   Uint8 r;
   Uint8 g;
   Uint8 b;
   Uint8 alpha;
} COLOUR;

COLOUR get_colour(int r, int g, int b, int alpha) {
   COLOUR colour;

   colour.r = r;
   colour.g = g;
   colour.b = b;
   colour.alpha = alpha;

   return colour;
}

然后我在我的主循环中插入这样的东西,只是为了重现我的问题:

for (i = 0; i < 640 * 480; i++) {
   blue = get_colour(0, 0, 255, 255);
   yellow = get_colour(255, 255, 0, 255);
}

这工作正常,还没有减速。

但是,如果我将函数 get_colour() 的代码移动到单独的 .C 文件中(我更喜欢将此类函数存储在库中),我开始变慢了。只是上面的简单 for 循环导致我的帧速率从 100+ fps 下降到 70 fps。

将我的函数 get_colour() 的代码移回与其余代码相同的 .C 文件,速度恢复正常。

这是什么原因造成的?

我的编译器是MinGW下的GCC,如果有什么关系的话。

非常感谢您的回答。

这几乎可以肯定是因为 inlining 而不是。上面有评论提到在其他文件中使用 inline 关键字不起作用。

您需要做的是在 .h 文件中定义内联函数,并将其包含在 main() 之上。不要忘记在编译期间使用 -O 标志以启用 inilining.

bar.h中:

typedef struct {
   Uint8 r;
   Uint8 g;
   Uint8 b;
   Uint8 alpha;
} COLOUR;

inline COLOUR get_colour(int r, int g, int b, int alpha) {
   COLOUR colour;

   colour.r = r;
   colour.g = g;
   colour.b = b;
   colour.alpha = alpha;

   return colour;
}

foo.c中:

#include "bar.h"

int main() {
    int i;
    COLOUR blue, yellow;
    for (i = 0; i < 640 * 480; i++) {
       blue = get_colour(0, 0, 255, 255);
       yellow = get_colour(255, 255, 0, 255);
    }    
}