如果将 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);
}
}
我用 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);
}
}