如何在Windows中查找信号量对象的大小?
我尝试使用sizeof()
,但我们不能将sempahore对象的名称作为sizeof的参数。它必须是手柄。 sizeof(HANDLE)
给出了句柄的大小而不是信号量。
答案 0 :(得分:4)
这就是所谓的“不透明手柄”。没有办法知道它有多大,它包含什么或内部如何工作。这使Microsoft能够在每个新版本的Windows中完全重写实现,而不必担心破坏现有代码。这与类具有公共和私有接口的概念类似。由于我们没有使用Windows内核,我们只能看到公共接口。
<强>更新强>
通过创建一堆并监视Process Explorer内存使用情况,可能会大致了解它们的大小。但是,由于它们很可能存在于内核而不是用户空间中,因此它可能根本不会出现。在任何情况下,都不保证过去或将来的任何其他版本的Windows,包括补丁/服务包。
答案 1 :(得分:3)
这是你隐藏的东西。你不能说它有多大。它是一个内核对象,所以它可能甚至不会存在于你的地址空间中。这就像问“进程表有多大?”或“Windows浪费多少MB?”。
我将补充一点,我在我的Windows 7 32位机器上做了一个小测试:100000个内核信号量(名称为X{number}
,0&lt; = number&lt; 100000)):4 MB的内核内存和8 MB的用户空间(均使用任务管理器测量)。内核空间大约40字节/信号量,用户空间大约80字节/信号量! (这在Win32中...在64位中它可能会加倍)