Win32API是否与32位版本和64位版本不同?

时间:2016-10-17 07:52:12

标签: windows api resources 64-bit handle

似乎所有win32 api都是32位版本,无论我安装的Windows是32位还是64位。如果我调用" CreateWindow",返回的HANDLE将是一个指向_HANDLE的指针,它是struct {int unused;}的结构。

所以32位窗口和64位窗口都使用windows api来管理32位样式的资源,对吗?

如果是这种情况,那么进程的文件/ gui句柄的上限数量在32 / 64bit窗口之间是否相同?换句话说,除了拥有更多内存外,与32位进程相比,64位Windows进程无法容纳更多系统资源?

感谢。

1 个答案:

答案 0 :(得分:2)

  

似乎所有win32 api都是32位版本,不管我安装的Windows是32位还是64位。

这不正确,您提供的示例(HANDLE)也显示了这一点:它是指针,因此在64位版本的Windows上它是64位宽。它指向一些任意结构 1 struct { int unused; };)的事实是不相关的。结构内容不使用 2

通过这种方式,您可以看到,HANDLE类型引用的内核对象的理论最大值在64位Windows上高于在32位Windows上。由于许多原因,实际限制通常低于那些限制。要列出所有内容太多,但这里有一些您可能感兴趣的相关文章的汇编:

<小时/> 1 仅在设置STRICT预处理器宏时才使用此结构。如果不是,则HANDLE只是void*的typedef。
2 该结构用于防止某些类别的程序员错误,例如将HANDLE分配给int。在系统内部,它是有意义的句柄