16 -битный int против 32 -битного int против 64 -битного int int

StackOverflow https://stackoverflow.com/questions/5812406

Вопрос

Я задавался вопросом об этом в течение долгого времени с тех пор, как у меня никогда не было «официального» образования в области компьютерных наук (я в старшей школе), поэтому, пожалуйста, извините за мое незнание по этому вопросу.

На платформе, которая поддерживает три типа целых чисел, перечисленных в заголовке, что лучше и почему? (Я знаю, что каждый вид INT имеет разные длины в памяти, но я не уверен, что это значит или как это влияет на производительность или, с точки зрения разработчика, у которого есть больше преимуществ по сравнению с другим).

Спасибо заранее за вашу помощь.

Это было полезно?

Решение

«Лучше» - это субъективный термин, но некоторые целые числа более эффективны на определенных платформах.

Например, на 32-битном компьютере (на это ссылается такие термины, как 32-разрядная платформа и Win32), процессор оптимизирован для обработки 32-разрядного значения за раз, а 32 относится к количеству битов, которые ЦП может потреблять или производить за один цикл. (Это действительно упрощенное объяснение, но оно дает общую идею).

В 64-разрядном компьютере (самые последние процессоры AMD и Intel попадают в эту категорию), процессор оптимизирован для обработки 64-битных значений за раз.

Таким образом, на 32-разрядной платформе 16-разрядное целое число, загруженное в 32-разрядный адрес, потребуется, чтобы на нем было 16 бит, чтобы ЦП мог работать на нем; 32-разрядное целое число было бы сразу же использоваться без каких-либо изменений, а 64-разрядное целое число должно было бы работать в двух или более циклах ЦП (один раз для низких 32-битных, а затем снова для высоких 32-битных). Анкет

И наоборот, на 64-разрядной платформе 16-разрядные целые числа должны будут иметь 48 бит, 32-разрядные целые числа, должны были иметь 32 бита, а 64-разрядные целые числа могут работать немедленно.

Каждая платформа и процессор имеют «нативные» битовые биты (например, 32 или 64), и это обычно ограничивает некоторые другие ресурсы, к которым можно получить доступ к этому процессору (например, ограничение памяти 3 ГБ/4 ГБ 32-битных процессоров. ) Процессоры семейства процессоров (и более X86) 80386 сделали 32-битную норму, но теперь такие компании, как AMD, а затем Intel в настоящее время делают 64-разрядную норму.

Другие советы

Чтобы ответить на ваш первый вопрос, использование 16 -битного против 32 -битного и 64 -битного целого числа зависит от контекста, в котором он используется. Поэтому вы действительно не можете сказать, что одно лучше по сравнению с другим. Однако, в зависимости от ситуации, использование одного над другим предпочтительнее. Рассмотрим этот пример. Допустим, у вас есть база данных с 10 миллионами пользователей, и вы хотите хранить год, когда они родились. Если вы создаете поле в своей базе данных с 64 -битным целым числом, вы исчерпали 80 мегабайтов своего хранилища; Принимая во внимание, что если бы вы использовали 16 -битное поле, будет использоваться только 20 мегабайт вашего хранилища. Вы можете использовать 16 -битное поле здесь, потому что год, когда люди рождаются, меньше, чем самое большое 16 -битное число. Другими словами, 1980, 1990, 1991 <65535, предполагая, что ваша область не подписывается. В целом, это зависит от контекста. Надеюсь, это поможет.

Простой ответ - использовать самый маленький, который, как вы знаете, будет безопасным для диапазона возможных значений, которые он будет содержать.

Если вы знаете, что возможные значения ограничены тем, что они меньше, чем 16-битное целое число максимальной длины (например, значение, соответствующее тому, какой день года он-всегда <= 366), тогда используйте это. Если вы не уверены (например, идентификатор записи таблицы в базе данных, в которой может быть количество строк), используйте Int32 или Int64 в зависимости от вашего суждения.

Другие, вероятно, могут дать вам лучшее представление о преимуществах производительности в зависимости от того, какой язык программирования вы используете, но меньшие типы используют меньше памяти и, следовательно, «лучше» использовать, если вам не нужно больше.

Просто для справки, 16 -битное целое число означает, что существует 2^16 возможных значений - обычно представлено от 0 до 65 535. 32-разрядные значения поднимаются до 2^32 или чуть более 4,29 млрд. Знаков.

Этот вопрос На 32-битных процессорах, более эффективным ли тип «целого числа», чем «короткий» тип? может добавить еще немного хорошей информации.

Это зависит от того, следует ли оптимизировать скорость или хранение. Если вы заинтересованы в скорости и запускаете SQL Server в 64 -битном режиме, то 64 -битные клавиши - это то, что вам нужно. 64 -битный процессор, работающий в 64 -битном режиме, оптимизирован для использования 64 -битных чисел и адресов. Аналогичным образом, 64 -битный процессор, работающий в 32 -битном режиме, оптимизирован для использования 32 -битных чисел и адресов. Например, в 64 -битном режиме все толкают и появляются в стеке, 8 байт и т. Д. Также извлекают из кэша, а память снова оптимизированы для 64 -битных чисел и адресов. Процессор, работающий в 64 -битном режиме, может потребоваться больше машинных циклов, чтобы обрабатывать 32 -битный номер, как процессор, так же как процессор, в 32 -битном режиме требуется больше машинных циклов для обработки 16 -битного числа. Увеличение времени обработки происходит по многим причинам, но просто подумайте о примере выравнивания памяти: 32 -битное число может не быть выровнен на 64 -битной интегральной границе, что означает, что загрузка числа требует смещения и маскировки числа после загрузки в регистр. По крайней мере, каждый 32 -битный номер должен быть замаскирован перед каждой операцией. Мы говорим, по крайней мере, вдвое снижаем эффективную скорость процессора при обработке 32 или 16 -битных целых чисел в 64 -битном режиме.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top