16-битный Int против 32-битного Int против 64-битного Int - PullRequest
17 голосов
/ 28 апреля 2011

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

Заранее благодарю за помощь.

Ответы [ 4 ]

25 голосов
/ 28 апреля 2011

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

Например, в 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-битных процессоров).Процессоры семейства 80386 (и более поздние x86) сделали 32-битную норму, но сейчас такие компании, как AMD, а затем Intel, в настоящее время делают 64-битную норму.

9 голосов
/ 28 апреля 2011

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

4 голосов
/ 28 апреля 2011

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

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

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

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

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

1 голос
/ 22 января 2013

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

...