2011-03-04 45 views
0

如何優化此代碼? pAmmoOffset是指針字節數組如何優化?指向數組的指針

*pAmmoOffset  = 0x89; 
*(pAmmoOffset + 1) = 0x70; 
*(pAmmoOffset + 2) = 0x04; 
+4

這裏沒有什麼可以優化的。最終最好的是編譯器。只要確保您使用優化標誌進行編譯。 – stefan 2011-03-04 14:14:02

+0

你想要以什麼方式優化這個?即,你想要改進什麼? – Jon 2011-03-04 14:15:01

+1

您是否已經優化了程序的其餘部分?這段代碼真的是瓶頸嗎?這非常優化,編譯器無論如何都會比指定哪個處理器的目標更好。 – 2011-03-04 14:19:11

回答

3

你有沒有測量這個代碼分析器,並確定這是一個瓶頸?如果是這樣的話,對不起,但是因爲編譯器已經儘可能地提高了效率,所以你無能爲力。

+0

我只能想象這3條線在探測器上達到峯值。 – Blindy 2011-03-04 14:17:32

0
*pAmmoOffset++ = 0x89; 
*pAmmoOffset++ = 0x70; 
*pAmmoOffst  = 0x04; 

當然,這會修改指針。另外,如果指針是全局變量,則生成的代碼將在每次寫入後重新讀取它。爲了解決這個問題,將它複製到一個局部變量並在寫入語句中使用它。

+0

這可能比示例代碼慢。函數'++'必須存儲舊值,遞增當前值,然後返回舊值。當然,這是編譯器和體系結構特有的。我見過像*(q ++)= *(p ++)這樣的代碼評估爲一個機器指令。 – Hannesh 2011-03-04 14:44:51

1

您可以嘗試在32位平臺上一次傳輸4個字節。 但是,如果試圖手動執行最終會比編譯器生成的速度慢,我不會感到驚訝。

你在做什麼只是儘可能簡單。可以做任何事情來進一步優化它,這是值得懷疑的,除非你提供的代碼不是這樣,並且你沒有將編譯時常量寫入這些地址。

+0

+1「如果試圖手動執行該操作最終會比編譯器生成的速度慢,我不會感到驚訝。」試圖在特定的代碼生成優化方面智勝編譯器幾乎總是失敗的遊戲。我將代碼註釋與一些奇怪的不可讀構造的「性能」捆綁在一起,並且您對它進行了描述,並且它比簡單的代碼慢。 – 2011-03-04 14:30:50

1

我看不出任何理由來優化您的代碼。但是,如果你必須你可以嘗試這樣的分配值的塊:
*(int*) pAmmoOffset = 0x08040201;

這相當於:
*pAmmoOffset = 0x01;
*(pAmmoOffset + 1) = 0x02;
*(pAmmoOffset + 2) = 0x04;
*(pAmmoOffset + 3) = 0x08;

你可以指定更大的塊作爲如果需要的話可以使用int64。

+0

這違反了嚴格的別名規則,也取決於底層硬件的字節順序。不要試試這個家! – 2011-03-04 17:08:36

+0

Gaa!我不知道這些規則。感謝您指出。 – fmotis 2011-03-07 07:07:30