Есть много вопросов, которые задают разницу между целыми типами short и int в С++, но практически, когда вы выбираете short over int?
Когда использовать `short` над` 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 предназначен для конкретных систем, где память является ценным ресурсом.