Каков диаметр долота долго в 64-разрядном Windows?

134
задан dbush 18 April 2017 в 01:38
поделиться

5 ответов

В мире Unix было несколько возможных расположений относительно размеров целых чисел и указателей для 64-разрядных платформ. Два, главным образом широко используемые, были ILP64 (на самом деле, только очень немного примеров этого; Cray была один таким), и LP64 (почти для всего остального). acronynms прибывают из 'интервала, долго, указатели являются 64-разрядными' и 'долго, указатели являются 64-разрядными'.

Type           ILP64   LP64   LLP64
char              8      8       8
short            16     16      16
int              64     32      32
long             64     64      32
long long        64     64      64
pointer          64     64      64

от системы ILP64 отказались в пользу [1 112] LP64 (то есть, почти все более поздние участники использовали LP64, на основе рекомендаций группы Аспена; только системы с долгим наследием 64-разрядной операции используют другую схему). Все современные 64-разрядные системы Unix используют LP64. MacOS X и Linux являются оба современными 64-разрядными системами.

Microsoft использует другую схему перехода к 64-разрядному: LLP64 ('долго долго, указатели являются 64-разрядными'). Это имеет заслугу означать, что 32-разрядное программное обеспечение может быть перекомпилировано без изменения. Это имеет недостаток того, чтобы быть отличающимся от того, что все остальные делают и также требуют, чтобы код был пересмотрен для использования 64-разрядных мощностей. Всегда был необходимый пересмотр; это был просто другой набор изменений от тех необходимых на платформах Unix.

, Если Вы разрабатываете свое программное обеспечение на основе независимых от платформы имен целого типа, вероятно, с помощью заголовка C99 <inttypes.h>, который, когда типы доступны на платформе, обеспечивает в со знаком (перечисленном) и неподписанном (не перечисленный; префикс с 'u'):

  • int8_t - 8-разрядные целые числа
  • int16_t - 16-разрядные целые числа
  • int32_t - 32-разрядные целые числа
  • int64_t - 64-разрядные целые числа
  • uintptr_t - целые числа без знака, достаточно большие для содержания указателей
  • intmax_t - самый большой размер целого числа на платформе (могло бы быть больше, чем int64_t)

, можно затем кодировать приложение с помощью этих типов, где это имеет значение, и быть очень осторожным с системными типами (который мог бы отличаться). Существует intptr_t тип - тип целого числа со знаком для содержания указателей; необходимо запланировать не использование его или только использование его как результат вычитания два uintptr_t значения (ptrdiff_t).

, Но, как вопрос указывает (в недоверии), существуют различные системы для размеров целочисленных типов данных на 64-разрядных машинах. Привыкните к нему; мир не собирается изменяться.

254
ответ дан 23 November 2019 в 23:54
поделиться

Эта статья о ссылках MSDN много псевдонимов типа (доступный в Windows), которые являются немного более явными относительно их ширины:

http://msdn.microsoft.com/en-us/library/aa505945.aspx

, Например, хотя можно использовать ULONGLONG для ссылки на 64-разрядное неподписанное интегральное значение, можно также использовать UINT64. (То же идет для ULONG и UINT32.), Возможно, они будут немного более ясными?

4
ответ дан 23 November 2019 в 23:54
поделиться

Microsoft также определила UINT_PTR и INT_PTR для целых чисел, которые являются тем же размером как указатель.

Вот список определенных типов Microsoft - это - часть их ссылки драйвера, но я полагаю, что это допустимо для общего программирования также.

4
ответ дан 23 November 2019 в 23:54
поделиться

Если необходимо использовать целые числа определенной длины, вероятно, необходимо использовать некоторые независимые от платформы заголовки для помощи Вам. Повышение является хорошим местом для взгляда на.

-1
ответ дан 23 November 2019 в 23:54
поделиться

Самый легкий способ узнать его для Вашего компилятора/платформы:

#include <iostream>

int main() {
  std::cout << sizeof(long)*8 << std::endl;
}

Themultiplication 8 должен получить биты от байтов.

при необходимости в конкретном размере является часто самым легким использовать один из предварительно определенных типов библиотеки. Если это - нежелательный, можно сделать то, что часто происходит с autoconf программным обеспечением, и имейте систему конфигурации, определяют правильный тип для необходимого размера.

2
ответ дан 23 November 2019 в 23:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: