gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 15:35:04 26 4
gpt4 key购买 nike

我用 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 - 如果将 C 函数放在单独的文件中,会出现减速问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34463875/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com