2011-10-17 14 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位中它可能會翻倍)