2016-10-17 2 views
0

Кажется, все win32 api - это 32-разрядная версия, неважно, что мои установленные окна - 32 бит или 64 бит. Если я назову «CreateWindow», возвращаемая HANDLE будет указателем на _HANDLE, которая является структурой struct {int unused;}.Отличается ли Win32API 32-битной версией и 64-битной версией?

Таким образом, как 32-битные окна, так и 64-битные окна используют windows api, который управляет ресурсом в 32-битном стиле, не так ли?

Если это так, то верхнее предельное количество файлов/gui-дескрипторов процесса одинаково между 32/64-битными окнами? Другими словами, помимо наличия большей памяти, 64-битный процесс Windows не может содержать больше системных ресурсов по сравнению с 32-битным процессом?

Спасибо.

ответ

2

Кажется, все win32 api - это 32-битная версия, неважно, что мои установленные окна - 32 бит или 64 бит.

Это не правильно, и пример вы предоставляете (HANDLE) показывает, что это так: Это указатель, так что 64 бита на 64-битной версии Windows, а. Тот факт, что он указывает на какую-то произвольную структуру (struct { int unused; };) не имеет отношения к делу. Содержимое структуры не используется .

С этой целью вы можете видеть, что теоретический максимум объектов ядра, на которые ссылается тип HANDLE, выше в 64-битной Windows, чем на 32-разрядной Windows. Практические пределы обычно ниже, чем по многим причинам. Слишком много, чтобы перечислить их все, но вот подборка соответствующих статей вы можете найти интересные:


Эта структура используется только, если STRICT макрос препроцессора устанавливается. Если это не так, HANDLE - это всего лишь typedef для void*.
структура служит для предотвращения определенных категорий ошибок программиста, как присвоение HANDLE к int. Внутренняя система, это ручка значение, что имеет смысл.

Смежные вопросы