2014-09-10 54 views
1

對於一個練習,我看看STARTUPINFO結構。如您所見,最後3個元素的類型爲HANDLE手柄的尺寸是多少?

所以我想知道HANDLE有哪些尺寸。有人知道HANDLE的大小嗎?

+2

爲什麼不試試sizeof(HANDLE)來找出答案。我認爲這是一個無效*。 – 2014-09-10 16:57:45

+1

HANDLE通常是'void *',所以一個指針,它是4個字節(系統相關) – AndyG 2014-09-10 16:57:56

+0

'HANDLE'不在C99中,它不在Posix中。我想這是一個Windows的東西。 – 2014-09-10 17:01:41

回答

4

Windows HANDLE類型不是完全不透明的類型。 Windows定義了一些可以依賴的屬性。主要的是你的問題的答案:它總是類型void *。從Windows Data Types進入MSDN上:

HANDLE

手柄可對象。

此類型在WINNT.H聲明如下:

typedef PVOID HANDLE;

後來在表中可以看到,PVOID被定義爲void *

所以a HANDLEvoid *的尺寸相同。換句話說,當使用32位編譯器時,它是32位,當使用64位編譯器時,它是64位。您不需要將這些值中的任何一個硬編碼到代碼中,而只需使用sizeof(HANDLE)

Windows HANDLE類型的其他屬性很晦澀難懂,而且只是幾乎沒有記錄:對於內核句柄the bottom two bits are always zero。你不應該在你的代碼中依賴這個,希望你能看到你永遠不會想要。我提到這是完整的,並強調微軟已經定義了HANDLE不僅僅是一個內部實現細節。

5

最佳答案是使用sizeof(HANDLE)獲取此信息。如果我沒有記錯,HANDLE通常作爲typedefvoid*,因此可能是32或64位,但不應該依賴於此。

希望這會有所幫助!