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