我有以下情況:這個函數調用會被g ++優化嗎?
void function(params)
{
#ifdef _MULTIPLAYER
if (isConnected)
{
if (isClient)
{
requestFunctionRemotely(params)
return;
}
else if (isServer)
{
call realFunction(params) remotely on client;
}
}
#endif
realFunction(params);
}
realFunction(params)
{
...
}
在這種情況下,我能夠建立我的項目或者與單人遊戲實例或多人。
這種方法已經被使用,因爲function(params)
被稱爲所有在我的代碼,所以在這種方式我只是連接到可能的最低水平,而不必問題。
我必須拆分function
和realFunction
,因爲客戶端收到的遠程響應必須通過realFunction
執行以避免循環(我可以更改函數原型來添加標誌,但是我會打破很多代碼)。
我的擔心與禁用_MULTIPLAYER
定義時的性能有關。我有很多function(params)
,我會打電話給他們一千次。我必須爲他們所有人使用這種方法。將G ++優化掉了兩個人通話時,它會發現
function(params) {
realFunction(params);
}
到
function(params) {
// body of realFunction
}
並沒有辦法迫使它在每一個類似的情況?
只是作爲一個提示:我目前使用的-O2
標誌
你有沒有試過用-03編譯時查看反彙編? – 2012-03-15 00:23:07
如果'realFunction'和'function'在同一個翻譯單元中,那麼是的,幾乎可以肯定。你試過了嗎? – 2012-03-15 00:24:37
1.在我之後重複一遍:「我不比編譯器更聰明,我不會試圖優化編譯器,直到我的應用程序變得太慢,我纔會在編譯器優化級別上擔心性能。 2.轉到1 – John3136 2012-03-15 00:28:17