2014-09-10 103 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位,但不应该依赖于此。

希望这会有所帮助!