каков размер объекта семафора Windows? - PullRequest
2 голосов
/ 17 октября 2011

Как найти размер объекта семафора в Windows?

Я пытался использовать sizeof(), но мы не можем дать имя объекта sempahore в качестве аргумента для sizeof. Это должна быть ручка. sizeof(HANDLE) дает нам размер ручки, а не семафора.

Ответы [ 2 ]

4 голосов
/ 17 октября 2011

Это то, что известно как «непрозрачная ручка».Нет никакого способа узнать, насколько он велик, что он содержит или как какая-либо из функций работает внутри.Это дает Microsoft возможность полностью переписывать реализацию с каждой новой версией Windows, если они хотят, не беспокоясь о нарушении существующего кода.Это похоже на концепцию открытого и закрытого интерфейса для класса.Поскольку мы не работаем над ядром Windows, мы видим только открытый интерфейс.

Обновление:

Возможно, можно получить приблизительное представление о том, какБольшие они, создавая группу и отслеживая, что происходит с использованием вашей памяти в Process Explorer .Однако, поскольку существует высокая вероятность того, что они живут в ядре, а не в пользовательском пространстве, оно может вообще не отображаться.В любом случае нет никаких гарантий относительно любой другой версии Windows, прошлой или будущей, включая исправления / пакеты обновления.

3 голосов
/ 17 октября 2011

Это что-то "скрытое" от вас.Вы не можете сказать, насколько он большой.И это объект ядра, так что он, вероятно, даже не живет в вашем адресном пространстве.Это все равно, что спросить «насколько велика таблица процессов?» Или «сколько мегабайт тратится на Windows?»семафоры ядра (с именем X{number} с 0 <= число <100000)): 4 МБ памяти ядра и 8 МБ пространства пользователя (оба измеряются с помощью диспетчера задач).Это около 40 байт / семафор в пространстве ядра и 80 байт / семафор в пространстве пользователя!(это в Win32 ... В 64 битах это, вероятно, удвоится) </p>

...