我正在使用gcc和發佈版本的-finline-functions優化。爲了防止代碼膨脹,因爲我在嵌入式系統上工作,我想說不要內聯特定的函數。執行此操作的顯而易見的方法是通過函數屬性,即屬性(noinline)。問題是,當我打開屬於-O3開關的全局-finline-functions優化時,這似乎不起作用。gcc -finline-functions行爲?
它也與它被模板化爲一個非模板版本的相同功能沒有得到內聯,這是預期的。
有沒有人有任何想法,當這個全局開關打開時如何控制內聯?
下面的代碼:
#include <cstdlib>
#include <iostream>
using namespace std;
class Base
{
public:
template<typename _Type_>
static _Type_ fooT(_Type_ x, _Type_ y) __attribute__ ((noinline));
};
template<typename _Type_>
_Type_ Base::fooT(_Type_ x, _Type_ y)
{
asm("");
return x + y;
}
int main(int argc, char *argv[])
{
int test = Base::fooT(1, 2);
printf("test = %d\n", test);
system("PAUSE");
return EXIT_SUCCESS;
}
不相關,但以下劃線開頭,後跟大寫字母的標識符爲編譯器保留。 – GManNickG 2010-03-16 00:05:29
不應該將__attribute __((noinline))附加到定義上嗎? – jpalecek 2010-03-16 00:09:23
@jpalecek:這是編譯錯誤 – user176168 2010-04-01 15:42:23