你並不需要一個64位處理器上的64位數據類型進行算術。我知道的所有32位編譯器都支持64位整數運算。如果硬件不允許本地算術,那麼編譯器必須生成代碼來進行算術運算。通常這會在編譯器的RTL中使用支持函數。
該結構旨在供不支持64位數據類型的編譯器使用。非常documentation給您鏈接使得清楚了:
注意你的C編譯器可以支持64位整數本身。例如,對於 示例,Microsoft Visual C++支持大小整數類型的__int64。 有關更多信息,請參閱C 編譯器隨附的文檔。
不支持本機64位整數的編譯器將無法將QUADPART
聯合成員視爲整數。
typedef union _ULARGE_INTEGER {
struct {
DWORD LowPart;
DWORD HighPart;
};
struct {
DWORD LowPart;
DWORD HighPart;
} u;
ULONGLONG QuadPart;
} ULARGE_INTEGER, *PULARGE_INTEGER;
和ULONGLONG
定義:
#if !defined(_M_IX86)
typedef unsigned __int64 ULONGLONG;
#else
typedef double ULONGLONG;
#endif
當然,寫在過去的10年(含)以上所有的編譯器將有64位整數的原生支持。但是,這個聯盟最初是在很久以前推出的,編譯器的格局會不一樣。在查看Windows頭文件時,請始終牢記歷史和遺留問題。
>不支持本機64位整數的編譯器將無法將QUADPART聯合成員視爲整數。 那麼當你在這樣的編譯器中做u.QuadPart + = c時會發生什麼? – Roland 2013-02-16 23:42:57
從頭文件中讀取帶有#if的部分的引用文本。 – 2013-02-17 00:54:07
@RaymondChen如果你執行'u.LowPart + = 100'並且它溢出,32位編譯器會發生什麼? – Roland 2017-08-07 05:15:02