为了练习,我查看了 STARTUPINFO
结构体。正如您所见,最后三个元素的类型是 HANDLE
。
因此,我想知道 HANDLE
大小。有人知道 HANDLE
的大小吗?
Windows中的HANDLE
类型并非完全不透明的类型。Windows定义了一些属性,您可以依赖这些属性。主要属性是回答您的问题:它始终是void *
类型。从MSDN上的Windows Data Types条目中可以看到:
HANDLE
一个对象的句柄。
该类型在WinNT.h中声明如下:
typedef PVOID HANDLE;
稍后在表格中,您可以看到PVOID
被定义为void *
。
因此,HANDLE
与void *
具有相同的大小。换句话说,在使用32位编译器时为32位,在使用64位编译器时为64位。您不应该硬编码这些值到您的代码中,而是使用sizeof(HANDLE)
。
HANDLE
类型的另一个属性非常晦涩,只有极少量的文档描述:对于内核句柄 底部两位始终为零。你不应该在代码中依赖它,希望你能看出你永远不想这样做。我提到这一点是为了完整性,并强调微软如何定义HANDLE
,超越了仅仅是一个内部实现细节。sizeof(HANDLE)
来获取这个信息。如果我没记错,HANDLE
通常被实现为void*
的typedef
,因此可能是32位或64位,但你不应该依赖于此。
void*
,也就是一个指针,大小为4个字节(取决于系统)。 - AndyGHANDLE
不在 C99 中也不在 Posix 中,我猜它是 Windows 的一个东西。 - Basile Starynkevitch