HANDLE的大小是多少?

10

为了练习,我查看了 STARTUPINFO 结构体。正如您所见,最后三个元素的类型是 HANDLE

因此,我想知道 HANDLE 大小。有人知道 HANDLE 的大小吗?


2
为什么不尝试使用sizeof(HANDLE)来找出答案。我认为它是一个void*。 - Peter L.
1
HANDLE通常是void*,也就是一个指针,大小为4个字节(取决于系统)。 - AndyG
HANDLE 不在 C99 中也不在 Posix 中,我猜它是 Windows 的一个东西。 - Basile Starynkevitch
2
句柄的作用在于隐藏实现细节。因此,千万不要问这个问题,这非常重要。无论你今天得到什么答案,在10年后都可能已经失效了。 - Hans Passant
2个回答

15

Windows中的HANDLE类型并非完全不透明的类型。Windows定义了一些属性,您可以依赖这些属性。主要属性是回答您的问题:它始终是void *类型。从MSDN上的Windows Data Types条目中可以看到:

HANDLE

一个对象的句柄。

该类型在WinNT.h中声明如下:

typedef PVOID HANDLE;

稍后在表格中,您可以看到PVOID被定义为void *

因此,HANDLEvoid *具有相同的大小。换句话说,在使用32位编译器时为32位,在使用64位编译器时为64位。您不应该硬编码这些值到您的代码中,而是使用sizeof(HANDLE)

Windows中的HANDLE类型的另一个属性非常晦涩,只有极少量的文档描述:对于内核句柄 底部两位始终为零。你不应该在代码中依赖它,希望你能看出你永远不想这样做。我提到这一点是为了完整性,并强调微软如何定义HANDLE,超越了仅仅是一个内部实现细节。

8
最好的答案是使用sizeof(HANDLE)来获取这个信息。如果我没记错,HANDLE通常被实现为void*typedef,因此可能是32位或64位,但你不应该依赖于此。
希望这可以帮到你!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接