如何在Windows中查找信号量对象的大小?窗口信号量对象的大小是多少?
我试过使用sizeof()
,但是我们不能将sempahore对象的名称作为sizeof的参数。它必须是手柄。 sizeof(HANDLE)
给我们处理的大小,而不是信号量。
如何在Windows中查找信号量对象的大小?窗口信号量对象的大小是多少?
我试过使用sizeof()
,但是我们不能将sempahore对象的名称作为sizeof的参数。它必须是手柄。 sizeof(HANDLE)
给我们处理的大小,而不是信号量。
这就是所谓的“不透明句柄”。没有办法知道它有多大,它包含什么,或者任何功能如何在内部工作。这使得微软能够在每一个新版Windows都完全重写实现的情况下,如果他们想要的话,而不必担心打破现有的代码。这是一个类似的概念,有一个公共和私人接口的类。由于我们不在Windows内核上工作,我们只能看到公共接口。
更新:
可能可以拿到他们创造了一堆和监控干什么去了?Process Explorer你的内存使用量有多大一个大概的了解。但是,由于它们很有可能位于内核而不是用户空间,因此它可能根本不会显示出来。无论如何,过去或未来的任何其他Windows版本都无法保证,包括补丁/服务包。
我想为应用程序创建数百个信号量。有什么方法可以让我知道他们需要多少记忆(如果他们拿的话)? –
@ajay bidari:*数百* *?你在做什么让你觉得你需要那么多的信号量?仅凭这一点就需要解决设计/架构问题。 –
@ajay我已经更新了我的答案。他们确实需要记忆,但可能并不多。 – IronMensan
这是“隐藏”你的东西。你不能说它有多大。它是一个内核对象,所以它甚至可能不住你的地址空间。这就像问“流程表有多大?”,或者“Windows有多少MB浪费?”。
要补充的是我已经作出了视窗7的32位机器上的一个小的测试:100000个内核中的信号(与名称 =数< 100000)):内核存储器的4 MB和用户8 MB空间(两者均使用任务管理器测量)。它在内核空间大约40字节/信号量,用户空间大约80字节/信号量! (这在Win32中...在64位中它可能会翻倍)
我相信它是*实现定义*。 –