[英]What is faster? two ints or __int64?
什么更快:(性能)
__int64 x,y;
x=y;
要么
int x,y,a,b;
x=a;
y=b;
?
還是相等?
__int64
是一個非標准的編譯器擴展 ,因此盡管它可能更快或更慢,但如果要跨平台代碼,則不希望使用它。 相反,您應該考慮使用#include <cstdint>
和uint64_t
等。它們源自C99標准,該標准為固定寬度整數算術提供stdint.h
和inttypes.h
。
在性能方面,這取決於您所使用的系統-例如, x86_64
在添加32位和64位整數時應該不會看到任何性能差異,因為add
指令可以處理32位或64位寄存器。
但是,如果您在32位平台上運行代碼或針對32位體系結構進行編譯,則添加64位整數實際上將需要添加兩個32位寄存器,而不是一個。 因此,如果您不需要多余的空間,則分配它會很浪費。
我不知道編譯器是否可以或必要時將類型優化為更小的尺寸。 我希望不會,但我不是編譯器工程師。
我討厭這些問題。
1)如果您不知道如何衡量自己,那么幾乎可以肯定您不需要知道答案。
2)在現代處理器上,很難預測基於單個指令的運行速度,了解程序的緩存使用情況和整體性能比擔心優化使用賦值的代碼小得多,這一點更為重要。 讓編譯器為此擔心,並花時間改進使用的算法或其他會帶來更大影響的事情。
簡而言之,您可能無法分辨,也可能無關緊要。 這是一個愚蠢的問題。
編譯器的優化器將刪除示例中的所有代碼,因此沒有區別。 我想您想知道一次移動數據32位還是一次移動64位更快。 如果您的數據對齊為8個字節,並且您使用的是64位計算機,則一次移動8個字節的數據應該更快。 但是,有幾個警告。 您可能會發現編譯器已經為您進行了優化(必須確保查看發出的匯編代碼),在這種情況下,您不會發現任何區別。 另外,如果要移動大量數據,請考慮使用memcpy而不是自己滾動。 如果您正在考慮將32位int數組轉換為64位以便更快地復制或更快地執行其他操作(即,減少指令數量的一半),請確保使用Google 嚴格的別名規則 。
__int64在大多數平台上應該更快,但是要小心-一些體系結構要求與8對齊才能生效,而某些體系結構如果未對齊,甚至會崩潰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.