Когда использовать `short` над` int`?

Есть много вопросов, которые задают разницу между целыми типами short и int в С++, но практически, когда вы выбираете short over int?

Ответы

Ответ 1

(Подробнее см. Эрик)

Примечания:

  • Как правило, int устанавливается в "натуральный размер" - целочисленную форму, которую аппаратное обеспечение обрабатывает наиболее эффективно
  • При использовании short в массиве или в арифметических операциях целое число short преобразуется в int, и поэтому это может привести к удару по скорости обработки short целых чисел
  • Использование short может сохранить память, если она уже int, что может быть важно при использовании большого массива
  • Ваша программа будет использовать больше памяти в 32-разрядной системе int по сравнению с 16-разрядной системой int

Вывод:

  • Используйте int, если вы не сохраняете память, является критическим, или ваша программа использует много памяти (например, много массивов). В этом случае используйте short.

Ответ 2

Вы выбираете short над int, когда:

Либо

  • Вы хотите уменьшить объем памяти сохраняемых значений (например, если вы настроите таргетинг на платформу с низкой памятью),
  • Вы хотите увеличить производительность за счет увеличения количества значений, которые могут быть упакованы на одну страницу памяти (уменьшение ошибок страницы при доступе к вашим значениям) и/или в кэшах памяти (уменьшение промахов в кеше при доступе к значениям) и профилирование показало, что здесь есть выгоды от производительности,
  • Или вы отправляете данные по сети или сохраняете их на диске, и хотите уменьшить свой размер (чтобы уменьшить дисковое пространство или пропускную способность сети). Хотя для этих случаев вам следует выбирать типы, которые точно определяют размер в битах, а не int или short, которые могут варьироваться в зависимости от платформы (так как вы хотите, чтобы платформа с 32-разрядным short могла прочитайте файл, написанный на платформе с 16-разрядным short). Хорошими кандидатами являются типы, определенные в stdint.h.

и

  • У вас есть числовое значение, которое не требует каких-либо значений, которые не могут быть сохранены в short на вашей целевой платформе (для 16-разрядного short, это -32768 - 32767, или 0 - 65535 для 16-разрядного unsigned short).
  • Ваша целевая платформа (или одна из ваших целевых платформ) использует меньше памяти для short, чем для int. Стандарт гарантирует, что short не больше int, поэтому реализациям разрешено иметь одинаковый размер для short и для int.

Примечание:

char также может использоваться как арифметические типы. Ответ на вопрос "Когда следует использовать char вместо short или int?" будет выглядеть очень похоже на этот, но с разными номерами (-128 - 127 для 8-разрядного char, 0 - 255 для 8-разрядного unsigned char)

Ответ 3

В общем, вы не предпочитаете short над int.

Тип int - размер родного слова процессора
Обычно int - размер слова процессора.

Например, с 32-разрядным процессором размера слова, int будет 32 бит. Процессор наиболее эффективен с использованием 32-битных. Предполагая, что short - 16 бит, процессор по-прежнему извлекает 32-битные данные из памяти. Таким образом, никакой эффективности здесь нет; на самом деле это больше, потому что процессору, возможно, придется сдвинуть биты, которые будут помещены в правильное положение в 32-битное слово.

Выбор меньшего типа данных Существуют стандартизованные типы данных, длина которых зависит от длины, например uint16_t. Они предпочтительнее двусмысленных типов char, short, и int. Эти типы данных, специфичные для этой ширины, обычно используются для доступа к аппаратным средствам или для сжатия пространства (например, протоколов сообщений).

Выбор меньшего диапазона
Тип данных short основан на диапазоне, а не на ширине бита. В 32-битной системе оба short и int могут иметь одинаковую 32-битную длину.

Как только причина использования short заключается в том, что значение никогда не пройдет мимо заданного диапазона. Обычно это ошибка, потому что программы будут меняться и тип данных может переполняться.

Резюме
В настоящее время я больше не использую short. Я использую uint16_t, когда я обращаюсь к 16-разрядным аппаратным устройствам. Я использую unsigned int для величин, включая индексы цикла. Я использую uint8_t, uint16_t и uint32_t, когда размер имеет значение для хранения данных. Тип данных short неоднозначен для хранения данных, поскольку он является минимальным. С появлением заголовочных файлов stdint больше не требуется short.

Ответ 4

Если у вас нет каких-либо конкретных ограничений, налагаемых вашей архитектурой, я бы сказал, что вы всегда можете использовать int. Тип short предназначен для конкретных систем, где память является ценным ресурсом.