2011-10-17 13 views
2

如何在Windows中查找信号量对象的大小?窗口信号量对象的大小是多少?

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

+0

我相信它是*实现定义*。 –

回答

4

这就是所谓的“不透明句柄”。没有办法知道它有多大,它包含什么,或者任何功能如何在内部工作。这使得微软能够在每一个新版Windows都完全重写实现的情况下,如果他们想要的话,而不必担心打破现有的代码。这是一个类似的概念,有一个公共和私人接口的类。由于我们不在Windows内核上工作,我们只能看到公共接口。

更新:

可能可以拿到他们创造了一堆和监控干什么去了?Process Explorer你的内存使用量有多大一个大概的了解。但是,由于它们很有可能位于内核而不是用户空间,因此它可能根本不会显示出来。无论如何,过去或未来的任何其他Windows版本都无法保证,包括补丁/服务包。

+0

我想为应用程序创建数百个信号量。有什么方法可以让我知道他们需要多少记忆(如果他们拿的话)? –

+1

@ajay bidari:*数百* *?你在做什么让你觉得你需要那么多的信号量?仅凭这一点就需要解决设计/架构问题。 –

+0

@ajay我已经更新了我的答案。他们确实需要记忆,但可能并不多。 – IronMensan

3

这是“隐藏”你的东西。你不能说它有多大。它是一个内核对象,所以它甚至可能不住你的地址空间。这就像问“流程表有多大?”,或者“Windows有多少MB浪费?”。

要补充的是我已经作出了视窗7的32位机器上的一个小的测试:100000个内核中的信号(与名称 =数< 100000)):内核存储器的4 MB和用户8 MB空间(两者均使用任务管理器测量)。它在内核空间大约40字节/信号量,用户空间大约80字节/信号量! (这在Win32中...在64位中它可能会翻倍)