Вам не нужно 64 битный процессор для выполнения арифметических операций над типом данных 64 бит. Все 32-битные компиляторы, которые я знаю о арифметике поддержки для 64-битных целых чисел. Если аппаратное обеспечение не позволяет использовать собственную арифметику, тогда компилятор должен сгенерировать код для выполнения арифметики. Обычно это будет использовать функции поддержки в RTL компилятора.
Структура предназначена для использования компиляторами, которые не обеспечивают встроенную поддержку 64-битных типов данных. Очень documentation, к которым вы связаны, что делает ясно:
Примечание Ваш C компилятор может поддерживать 64-битные целые числа изначально. Например, Microsoft Visual C++ поддерживает __int64 тип целочисленного размера. Дополнительную информацию см. В документации, прилагаемой к вашему компилятору C .
Компиляторы, которые не поддерживают родные 64-битные целые числа, не смогут обрабатывать член объединения QUADPART
как целое число.
typedef union _ULARGE_INTEGER {
struct {
DWORD LowPart;
DWORD HighPart;
};
struct {
DWORD LowPart;
DWORD HighPart;
} u;
ULONGLONG QuadPart;
} ULARGE_INTEGER, *PULARGE_INTEGER;
И определение ULONGLONG
:
#if !defined(_M_IX86)
typedef unsigned __int64 ULONGLONG;
#else
typedef double ULONGLONG;
#endif
Конечно, все компиляторы, написанные в течение последних 10 лет (или больше) будет иметь встроенную поддержку 64-битных целых чисел. Но этот союз изначально был введен очень давно, и тогда пейзаж компилятора был бы другим. При просмотре файлов заголовков Windows всегда помните историю и наследие.
Компиляторы, которые не поддерживают собственные 64-битные целые числа, не смогут рассматривать член объединения QUADPART как целое число. Итак, что произойдет, если вы выполните u.QuadPart + = c на таком компиляторе? – Roland
Прочитайте цитированный текст из файла заголовка, часть с #if. –
@RaymondChen Что произойдет с 32-битным компилятором, если вы делаете 'u.LowPart + = 100' и переполняется? – Roland