windows信号量对象的大小是多少?

时间:2011-10-17 05:17:00

标签: windows semaphore

如何在Windows中查找信号量对象的大小?

我尝试使用sizeof(),但我们不能将sempahore对象的名称作为sizeof的参数。它必须是手柄。 sizeof(HANDLE)给出了句柄的大小而不是信号量。

2 个答案:

答案 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位中它可能会加倍)