新的資料類型
64 位 Windows 引進三種資料類型類別:固定精確度資料類型、指標精確度類型,以及特定指標精確度類型。 這些類型已新增至開發環境,可讓開發人員準備 64 位 Windows。 這些類型衍生自基本 C 語言整數和長型別。 因此,您可以在編譯及測試 32 位 Windows 的程式碼中使用這些資料類型,然後在以 64 位 Windows 為目標時,使用 64 位編譯器重新編譯。
即使是只以 32 位 Windows 為目標的應用程式,採用這些新的資料類型,您的程式碼也會更強固。 若要使用這些資料類型,您必須掃描程式碼中是否有可能不安全的指標使用方式、多型和資料定義。 例如,當變數的類型為 ULONG_PTR時,它顯然會用於轉換算數運算或多型的指標。 您無法直接使用較舊的資料類型來指出這類使用方式。 (您可以使用衍生類型命名或匈牙利文標記法間接執行這項操作,但這兩種技術都很容易發生錯誤。)
所有這些資料類型都會在 BaseTsd.h 中宣告。 如需詳細資訊,包括這些資料類型的定義,請參閱 Windows 資料類型。
固定有效位數
固定精確度資料類型在 32 位和 64 位 Windows 中都是相同的長度。 為了協助您記住這一點,其精確度是資料類型名稱的一部分。 以下是固定精確度資料類型。
詞彙 | 描述 |
---|---|
DWORD32 |
32 位元不帶正負號的整數 |
DWORD64 |
64 位元不帶正負號的整數 |
INT32 |
32 位元帶正負號的整數 |
INT64 |
64 位元帶正負號的整數 |
LONG32 |
32 位元帶正負號的整數 |
LONG64 |
64 位元帶正負號的整數 |
UINT32 |
未簽署 的 INT32 |
UINT64 |
未簽署 的 INT64 |
ULONG32 |
未簽署 的 LONG32 |
ULONG64 |
未簽署 的 LONG64 |
指標有效位數
當指標有效位數變更 (,因為 32 位 Windows 上的 32 位和 64 位的 Windows) ,指標有效位數資料類型會據以反映精確度。 因此,在執行指標算術時,將指標轉換成其中一種類型是安全的;如果指標有效位數為 64 位,則類型為 64 位。 計數類型也會反映指標可參考的大小上限。 以下是指標精確度和計數類型。
詞彙 | 描述 |
---|---|
DWORD_PTR |
指標精確度的不帶正負號長類型。 |
HALF_PTR |
指標大小的一半。 在包含指標和兩個小欄位的結構內使用。 |
INT_PTR |
指標有效位數的帶正負號整數類型。 |
LONG_PTR |
指標有效位數的帶正負號長類型。 |
SIZE_T |
指標可參考的最大位元組數目。 用於必須跨越指標完整範圍的計數。 |
SSIZE_T |
已簽署 SIZE_T。 |
UHALF_PTR |
未簽署 HALF_PTR。 |
UINT_PTR |
未簽署 INT_PTR。 |
ULONG_PTR |
未簽署 LONG_PTR。 |
特定Pointer-Precision類型
下列新的指標類型會明確調整指標的大小。 在 64 位程式碼中使用指標時請小心:如果您使用 32 位類型宣告指標,作業系統會藉由截斷 64 位指標來建立指標。 (64 位 Windows.) 上所有指標都是 64 位
詞彙 | 描述 |
---|---|
POINTER_32 |
32 位指標。 在 32 位 Windows 上,這是原生指標。 在 64 位 Windows 上,這是截斷的 64 位指標。 |
POINTER_64 |
64 位指標。 在 64 位 Windows 上,這是原生指標。 在 32 位 Windows 上,這是帶正負號的 32 位指標。 請注意,假設高指標位的狀態並不安全。 |