Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Три класса типов данных были представлены для 64-разрядной версии Windows: типы фиксированной точности, типы точности указателя и типы точности конкретного указателя. Эти типы были добавлены в среду разработки, чтобы разработчики могли подготовиться к 64-разрядной версии Windows. Эти типы являются производными от базового целого числа языка C и длинных типов. Таким образом, эти типы данных можно использовать в коде, который вы компилируете и тестируете в 32-разрядной версии Windows, а затем переписываете с использованием 64-разрядного компилятора при нацеливании на 64-разрядную версию Windows.
Даже для приложений, предназначенных только для 32-разрядных Windows, внедрение этих новых типов данных делает код более надежным. Чтобы использовать эти типы данных, необходимо проверить код для потенциально небезопасного использования указателя, полиморфизма и определений данных. Например, если переменная имеет тип ULONG_PTR, ясно, что она будет использоваться для приведения указателей для арифметических операций или полиморфизма. Невозможно указать такое использование непосредственно с помощью старых типов данных. (Это можно сделать косвенно с помощью именования производных типов или венгерской нотации, но оба метода подвержены ошибкам.)
Все эти типы данных объявлены в BaseTsd.h. Дополнительные сведения, включая определения этих типов данных, см. в типах данных Windows.
Фиксированная точность
Типы данных фиксированной точности одинаковы в 32-разрядных и 64-разрядных Windows. Чтобы вам было легче это запомнить, точность указывается прямо в названии типа данных. Ниже приведены типы данных фиксированной точности.
Срок | Описание |
---|---|
DWORD32 |
32-разрядное целое число без знака |
DWORD64 |
64-разрядное целое число без знака |
INT32 |
32-разрядное целое число со знаком |
INT64 |
64-разрядное целое число со знаком |
LONG32 |
32-разрядное целое число со знаком |
LONG64 |
64-разрядное целое число со знаком |
UINT32 |
Неподписанный INT32 |
UINT64 |
Неподписанный INT64 |
ULONG32 |
Без знака LONG32 |
ULONG64 |
Без знака LONG64 |
Точность указателя
По мере изменения точности указателя (то есть, с 32 битами в 32-разрядных версиях Windows и 64 битами в 64-разрядных), типы данных точности указателя соответствующим образом отражают эту точность. Поэтому при выполнении арифметики указателя можно привести указатель к одному из этих типов; Если точность указателя равна 64 битам, тип равен 64 битам. Типы счетчиков также отражают максимальный размер, к которому может ссылаться указатель. Ниже приведены типы точности указателя и счетчика.
Срок | Описание |
---|---|
DWORD_PTR |
Неподписанный длинный тип для точности указателя. |
HALF_PTR |
Половина размера указателя. Используйте в структуре, содержащей указатель и два небольших поля. |
INT_PTR |
Целочисленный тип со знаком для повышения точности в работе с указателями. |
LONG_PTR |
Знаковый тип long для точности операций с указателями. |
SIZE_T |
Максимальное число байтов, к которым может ссылаться указатель. Используется для подсчета, который должен охватывать полный диапазон указателя. |
SSIZE_T |
Подписанный SIZE_T. |
UHALF_PTR |
Неподписанный HALF_PTR. |
UINT_PTR |
Неподписанный INT_PTR. |
ULONG_PTR |
Неподписанный LONG_PTR. |
Конкретные типы Pointer-Precision
Следующие новые типы указателей явно задают размер указателя. Будьте осторожны при использовании указателей в 64-разрядном коде: если вы объявляете указатель с помощью 32-разрядного типа, операционная система создает указатель путем усечения 64-разрядного указателя. (Все указатели — это 64-разрядные указатели в 64-разрядной версии Windows.)
Срок | Описание |
---|---|
POINTER_32 |
32-разрядный указатель. В 32-разрядной версии Windows это собственный указатель. В 64-разрядной версии Windows это усеченный 64-разрядный указатель. |
POINTER_64 |
64-разрядный указатель. В 64-разрядной версии Windows это собственный указатель. В 32-разрядной версии Windows это расширенный 32-разрядный указатель на знак. Обратите внимание, что небезопасно предполагать состояние старшего бита указателя. |