如何在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位中它可能會翻倍)
我相信它是*實現定義*。 –