Модель программирования Win64
В зависимости от выбора способа представления таких стандартных типов данных С, как указатели и целочисленные типы данных (long, int и short), a также от того, вводятся или не вводятся нестандартные типы данных, возможны несколько вариантов модели 64-разрядного программирования. Напомним, что в стандарте ANSI С размеры типов данных не определяются строго, хотя и требуется, чтобы размер данных типа long int был не меньше размера данных типа int, а размер данных типа int был не меньше размера данных типа short int.
Цели
Цель состоит в том, чтобы ввести единое определение Windows API (то есть, общее для Win32 и Win64), благодаря чему можно будет использовать единый базовый исходный код. Использование этого единого определения может потребовать внесения некоторые изменений в исходный код, но эти изменения должны быть сведены к минимуму.
Microsoft выбрала модель LLP64 (целые числа типа long и 64-битовые указатели), на которую обычно ссылаются просто как на модель Р64. В частности, существуют следующие определения типов данных, применимые как к данным со знаком, так и к данным без знака:
• char — 8 бит, и wchar — 16 бит.
• short — 16 бит.
• int — 32 бита.
• long int — также 32 бита.
• Размер указателя любого типа, например PVOID, составляет 64 бита.
Для тех случаев, когда требуются данные строго определенного размера, предусмотрены дополнительные типы данных. Так, компилятор Microsoft различает следующие типы данных: _int16, _int32 и _int64.
Типы данных
Приведенные в этой главе таблицы взяты непосредственно из оперативной справочной системы и представляют единую модель данных Windows (Windows Uniform Data Model). Определения типов можно найти в заголовочном файле BASETSD.H, входящем в состав интегрированной среды разработки приложений Microsoft Visual Studio .NET (версия 7.0) и версию 6.0 этой системы.
Типы данных фиксированной точности
Обозначения типов данных фиксированной точности получаются из обычных обозначений типов данных Win32, таких как DWORD или LONG, добавлением суффикса размера, как показано в табл. 16.1.
Таблица 16.1. Типы данных фиксированной точности
Тип данных | Описание |
DWORD32 | 32-битовое целое без знака |
DWORD64 | 64-битовое целое без знака |
INT32 | 32-битовое целое со знаком |
INT64 | 64-битовое целое со знаком |
LONG32 | 32-битовое целое со знаком |
LONG64 | 64-битовое целое со знаком |
UINT32 | Целое типа INT32 без знака |
UINT64 | Целое типа INT64 без знака |
ULONG32 | Целое типа LONG32 без знака |
ULONG64 | Целое типа LONG64 без знака |