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



如何在窗口中找到一个信号量对象的大小?

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

这就是所谓的"不透明句柄"。没有办法知道它到底有多大,它包含什么,或者它的内部功能是如何工作的。这使得微软可以在每个新版本的Windows上完全重写实现,而不用担心破坏现有的代码。这与拥有一个类的公共和私有接口的概念类似。因为我们不是在Windows内核上工作,所以我们只能看到公共接口。

更新:

通过在进程资源管理器中创建一堆并监视内存使用情况,可以大致了解它们有多大。但是,由于它们很有可能存在于内核中而不是用户空间中,因此可能根本不会显示出来。在任何情况下,没有保证任何其他版本的Windows,过去或未来,包括补丁/服务包。

这是你"隐藏"的东西。你不能说它有多大。它是一个内核对象,所以它可能不在你的地址空间中。这就像问"进程表有多大?",或者"Windows浪费了多少MB ?"。

我将补充说,我已经在我的Windows 7 32位机器上做了一个小测试:100000内核信号量(名称X{number}与0 <= number <(100,000)): 4 mb内核内存和8 mb用户空间(都是通过任务管理器测量的)。内核空间中大约40字节/信号量,用户空间中大约80字节/信号量!(这是在Win32…在64位中,它可能会翻倍)

最新更新