Что решает размер целого числа? - PullRequest
5 голосов
/ 13 марта 2012

sizeof(int) показывает 4 на моем Dev Cpp, хотя он работает на 64-битной машине.Почему он не рассматривает базовый HW и вместо этого показывает 8?Кроме того, если компиляция среды также изменится на 64-битную (имеет ли смысл 64 bit compiler, в первую очередь, ?!), изменится ли тогда размер int?

Существуют ли стандарты, которые решают это?

Ответы [ 2 ]

16 голосов
/ 13 марта 2012

Взято из http://en.wikipedia.org/wiki/64-bit (под 64-bit data models)

Существуют различные модели, Microsoft решила, что sizeof(int) == 4, некоторые (несколько) другие этого не сделали.

* 1008Порт HAL Computer Systems от Solaris до SPARC64 и Unicos, кажется, единственные, где sizeof(int) == 8.Они называются моделями ILP64 и SILP64.

Настоящая «война» была за sizeof(long), где Microsoft решила за sizeof(long) == 4 (LLP64), тогда как почти все остальные решили за sizeof(long) == 8 (LP64).

Обратите внимание, что на самом деле именно компилятор "решает", какую модель использовать, но как написано в вики

Обратите внимание, что модель программирования является выбором, сделанным для каждого компилятораи несколько могут сосуществовать в одной ОС.Тем не менее, модель программирования, выбранная в качестве основной модели для API OS, обычно доминирует.

0 голосов
/ 28 апреля 2017

Хотя компилятор в конечном итоге определяет размер целого числа, он обычно наследуется как размер регистров ЦП, который будет содержать целое число.Многие процессоры поддерживают 32-разрядную / 64-разрядную регистровую арифметику, и настройки компилятора определяют, какой режим вызывается.Поскольку sizeof (long) и т. Д., Единственная гарантия - sizeof (long)> = sizeof (short).

...