2011-10-17 5 views
2

Windows에서 세마포어 개체의 크기를 찾는 방법은 무엇입니까?윈도우 세마포어 객체의 크기는 얼마입니까?

sizeof()을 사용해 보았지만 sempahore 객체의 이름을 sizeof의 인수로 지정할 수 없습니다. 그것은 손잡이가되어야합니다. sizeof(HANDLE)은 세마포어가 아닌 핸들 크기를 제공합니다.

+0

구현 정의 * *라고 생각합니다. –

답변

4

"불투명 한 핸들"이라고합니다. 실제로 얼마나 큰지, 무엇이 포함되어 있는지, 어떤 기능이 내부적으로 어떻게 작동하는지 알 수있는 방법이 없습니다. 이로써 Microsoft는 기존 코드를 손상시키지 않으려는 새 Windows 버전마다 구현을 완전히 다시 작성할 수 있습니다. 클래스와 공용 및 개인 인터페이스를 갖는 것과 비슷한 개념입니다. 우리가 Windows 커널에서 작업하지 않기 때문에 공용 인터페이스 만 볼 수 있습니다.

업데이트 :

그것은 그들이 무리를 만들고 Process Explorer에서 메모리 사용으로 발생하는 모니터링하여 얼마나 큰의 거친 아이디어를 얻을 수있을 수 있습니다. 그러나 사용자 공간이 아닌 커널에 살 가능성이 있기 때문에 전혀 표시되지 않을 수 있습니다. 어떤 경우에도 패치/서비스 팩을 포함하여 과거 나 미래의 Windows 버전에 대한 보장은 없습니다.

+0

응용 프로그램을위한 수백 개의 세마포를 만들고 싶었습니다. 얼마나 많은 기억을 취하는 지 알 수있는 방법이 있습니까? –

+1

@ajay bidari : * Hundreds *? 당신이 그렇게 많은 세마포어가 필요하다고 생각하게하는 것은 세계에서 무엇입니까? 그것만으로는 해결해야 할 디자인/건축 문제가 있습니다. –

+0

@ajay 답변을 업데이트했습니다. 그들은 추억을 가지고 간다, 그러나 아마별로. – IronMensan

3

"숨겨진"것입니다. 얼마나 큰지 말할 수는 없습니다. 그리고 그것은 커널 객체이기 때문에 여러분의 주소 공간에 살지도 못합니다. "프로세스 테이블이 얼마나 큰가?"또는 "얼마나 많은 MB가 Windows 낭비입니까?"와 같은 질문입니다.

나는 내 Windows 7 32 비트 시스템에서 작은 테스트 만든 것을 추가 할 것입니다 : 100000 커널 세마포어 (과 이름 X{number}와 0 < = 수 < 100000)) : 커널 메모리 4 mb 및 사용자의 8메가바이트 공간 (둘 다 작업 관리자로 측정). 커널 공간에서는 약 40 바이트/세마포어이고 사용자 공간에서는 세마포어가 80 바이트입니다. (Win32에서는 ... 64 비트에서는 아마 두 배가됩니다)

관련 문제