2014-10-09 53 views
1

我使用Borland C++ Builder 2009構建32位可執行文件。導致在32位代碼中使用64位變量的性能損失

我需要改變我的代碼很大一部分,因爲我需要幾乎所有對象的一個​​變量改變(至少)爲64位的變量,它是使用了很多在計算中等等

雖然這樣做我經常面臨這樣的事實:對於使用的特定功能,64位值不是必需的,也不會被需要(例如,緩衝區大小限制,或僅使用不能超過DWORD邊界的子範圍等),那麼我想知道,我是否應該改變這些例程。

或者,在那些使用64位變量輸入,改變其他功能範圍變量到64位,以及,或離開它們作爲是功能。

所以我在想,如果一個32位應用程序實際上是從使用64位變量「遭受」與否?如果這是重要的或完全不相關的?在前者的情況下,我會嘗試在可能的情況下保留DWORD值。

+4

這個問題似乎是無關緊要的,因爲它是關於需求,體系結構和重構,並且更適合http://programmers.stackexchange.com/ – 2014-10-09 14:41:54

回答

4

是比寄存器大操縱值通常需要更多的CPU週期,從而是的,這可能會對性能有很大的影響,但可以肯定,如果這是相關的情況下,你無論如何都要配置文件。

+0

最多隻會影響他,只要他沒有做重整數算術,並且到處都是整數大小的兩倍。除了誇張之外,還不錯。 – Deduplicator 2014-10-09 14:33:47

+0

我意識到它可能對軟件的性能(用戶體驗)沒有明顯的影響,但理解我的改變的含義是很好的,因此很好理解確實存在成本。 – Peter 2014-10-09 18:16:10

1

「很多計算」恰恰是什麼?在一個永無止境的循環中,幾百秒內計算幾百次,或者是巨大的矩陣運算?與類似的32位操作相比,64位算術加法和減法會使計算時間加倍。乘法的成本可能相對較高,而且劃分成本更高。

不同大小或不同簽名的整數之間的賦值和算術通常是透明地支持的,即使它可能會導致精度或(可能意外的)符號擴展擴展的損失。同樣的透明度可能會緩解你的工作,也可能會給你帶來一些模糊的問題。

我想你需要一個64位的變量,因爲你代表上述遠高於2G(或4G)值。如果你這樣做,你不應該試圖將它們分配給32位(或更短)的變量。如果您懷疑可能會發生這種情況,則應該更改所涉及的所有變量或屬性,或使用斷言來防止意外的精度損失。

縮短到更大的任務應該是永遠OK,只要你不混合符號和無符號的變量。

語言功能,比如運算符重載或模板和模板實例,可能需要特殊的考慮。

+0

我相信我的事情在控制之中,而且從較大到較短的任務。我通常處理無符號變量,但在需要將int(32位)轉換爲帶符號__int64的情況下,如果int爲負數,那麼在64位int中這不會被正確轉換爲相同的負值嗎? – Peter 2014-10-09 18:21:59