Поделиться через


Новые типы данных

Три класса типов данных были представлены для 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-разрядный указатель на знак.
Обратите внимание, что небезопасно предполагать состояние старшего бита указателя.