我遇到一些奇怪的問題,增速放緩與我的程序,C語言編寫的如果將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,如果這與它有任何關係。
非常感謝您的任何答案。
這可能是與[內聯展開]的問題(https://en.wikipedia.org/wiki/Inline_expansion)。如果函數在同一個[*翻譯單元*](https://en.wikipedia.org/wiki/Translation_unit_%28programming%29)中,那麼編譯器可能能夠內聯該函數,但是如果該函數在另一個函數中源文件(因此也是另一個翻譯單元),那麼編譯器不能這樣做。 –
你真的需要這樣的功能嗎?你不能在你的循環之前定義'const COLOR blue = {0,0,255,255};' –
@KerrekSB顏色功能就是一個例子。對不起,如果它過度複雜我的問題或從中吸引注意力。我將它列入,因爲那是我發現我遇到的問題的地方。從那時起,我發現我可以擁有這樣的函數:'int return_something(){return 0; }'並且在for循環中調用這個函數很多次,而且我會遇到相同的放緩問題。但是隻有在函數放在一個單獨的.C文件中。 – user5716859