16 бит Int против 32-битного Int против 64 бит Int

Мне давно это интересно, так как у меня никогда не было "формального" образования по информатике (я в старшей школе), поэтому, пожалуйста, извините мое невежество по этому вопросу.

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

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

16
задан ArturoVM 28 апр. '11 в 3:53
источник поделиться
4 ответов

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

Например, на 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-битную норму.

21
ответ дан M. Shawn Dillon 28 апр. '11 в 4:11
источник поделиться

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

8
ответ дан WindsurferOak 28 апр. '11 в 4:06
источник поделиться

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

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

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

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

Этот вопрос В 32-разрядных ЦП, является ли "целочисленным" типом более эффективным, чем "короткий" тип? может добавить более хорошую информацию.

4
ответ дан nycdan 28 апр. '11 в 3:57
источник поделиться

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

1
ответ дан Jack D Menendez 22 янв. '13 в 20:45
источник поделиться

Другие вопросы по меткам