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

时间:2015-12-25 15:01:02

标签: c gcc mingw

我的程序出现了一些奇怪的减速问题,用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,如果与它有任何关系。

非常感谢您的回答。

1 个答案:

答案 0 :(得分:3)

这几乎可以肯定是因为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); } }

sys.argv