Я читаю здесь Benefit of using short instead of int in for... loop, что на самом деле не имеет смысла использовать короткие, а не простые int в цикле, поскольку в большинстве архитектур короткие будут занимать тот же объем памяти, что и внутр. Это заставляет меня думать, что короткие ints действительно не полезны, потому что они не приводят к тому, что можно ожидать, это сохранение памяти. Однако в производственном коде я часто вижу, что короткие ints используются как аргументы функции. Например, когда я просматривал coreboot (coreboot.org) с помощью ack-grep, я нашел много функций, которые занимают короткие позиции. Я понимаю, что код Coreboot довольно низкоуровневый, но мне интересно, какая польза, если таковая имеется, в использовании короткого, а не int в C на архитектуре x86? Когда я должен его использовать?Преимущества определения функции, принимающей short int вместо int
ответ
Некоторые функции предназначены для short
и других для int
.
Если кто-то хочет, чтобы сосчитать все биты, установленные в short
можно было бы использовать
int CountBits_short(short x);
Если кто-то хочет считать все биты, установленные в int
можно было бы использовать
int CountBits_int(int x);
Eсть не проблема производительности здесь, просто функциональная разница.
@JonathanLeffler комментарий к OP подводит итог наиболее полезной Причины short
в них может занимать меньше места.
Другие
Другие мысли:
На платформах, где sizeof(int) == sizeof(short)
нет никакой выгоды производительности.
В противном случае мы знаем sizeof(int) > sizeof(short)
.
Компилятор может сделать аналогичный код входа/выхода для следующего и без разницы в производительности.
void foo_s(short bar);
void foo_i(int bar);
Попутно указатель, как в
void foo_s(short *bar);
void foo_i(int *bar);
sizeof(bar)
то же самое, ибо он не является адресом, опять никакой пользы в увеличивающие мимоходом.
при прохождении массивов, как в
void foo_s(short bar[]);
void foo_i(int bar[]);
bar
становится адресом первого элемента, опять тот же самый размер, поскольку он не является адресом, опять никакой пользы в увеличивающие мимоходом.
Выполнение функций, которые используют short
номинально считаются чуть хуже, чем int
в том, что различных количествах кода может быть необходимо для содействия/разжаловать между short
и процессором предпочел int
. int
по определению * 1 - номинально предпочтительный целочисленный размер процессора.
Конечно, любые проблемы с производительностью требуют профилирования для проверки, но суть заключается в том, что short
используется для экономии места с потенциальной номинальной стоимостью в производительности.
* 1 все еще ищет spec def, так что пока это мое мнение.
Самое большое преимущество использования short
приходит тогда, когда они используются в совокупности — в основном в массиве short
IOW, или, возможно, в качестве членов структуры ‐ как массив short
обычно занимает половину пространства массива int
с таким же количеством записей.
Другим возможным преимуществом является то, что если функция определена для принятия short
, вы знаете, что значение будет находиться в диапазоне -32768 .. + 32767 (в системах с целыми числами 2 и 16-битным short
, что это большинство систем), которые могут упростить ваши процессы проверки внутри функции. Если пройденный тип был int
вместо short
, но диапазон допустимых значений -32788 .. + 32767, тогда вам нужно будет проверить, что переданное значение находилось в диапазоне (при условии, что sizeof(int) > sizeof(short)
, что не гарантируется, но является типичным).
В противном случае переменные типа short
не помогут вам, если вы не соответствуете внешней спецификации какого-либо рода.
+1 для не сказать sizeof (int) всегда> sizeof (короткий). Встраиваемые системы сегодня являются заметным использованием, где они часто бывают одинаковыми. – chux
- 1. short plus short is int
- 2. Преобразование short в int
- 3. неподписанных INT * вместо Int
- 4. метод перегрузки int vs short
- 5. Функции возвращают int вместо bool
- 6. Печать фактического значения int при передаче функции, принимающей параметр char
- 7. Преимущества/недостатки int и Int32
- 8. Сужение преобразования без знака int в short unsigned int
- 9. Scala `+` функтор, определенный на картах Int от Short to Int?
- 10. short int to unsigned int by byte order by C++
- 11. Преобразование unsigned char в int и short
- 12. MySQL определение определения int
- 13. Какая разница между unsigned short int и unsigned int или unsigned short?
- 14. разница между unsigned short int и unsigned short
- 15. В чем разница между «short int» и «short» in c?
- 16. В чем разница между int -> int -> int и (int * int) -> int в SML?
- 17. Преобразование QString в unsigned short int
- 18. short to int cast, weird behavior
- 19. Append данные Short, Int, Long Long ... обугливаться *
- 20. Вывод короткого int и unsigned short?
- 21. Является ли тип unsigned short + int реализационным?
- 22. overflow short int в языке C
- 23. Где Short.toString (short s, int radix)?
- 24. Преимущества использования mediumint вместо int для столбцов первичного ключа?
- 25. Есть ли преимущества в использовании size_t вместо unsigned int?
- 26. Почему вместо компилятора функции видит «unsigned int»?
- 27. Возврат к int main() вместо предыдущей функции?
- 28. BOOST_TYPEOF возвращает int вместо const int
- 29. Почему (String, Int) ожидается вместо (Char, Int)?
- 30. Seq.find return 'a -> int вместо int
Самое большое преимущество использования 'short' приходит, когда они используются в совокупности - в массиве' short' IOW - поскольку этот массив занимает половину пространства массива 'int'. Другое возможное преимущество заключается в том, что если функция определена как «короткая», вы знаете, что значение будет находиться в диапазоне -32768 .. + 32767 (для систем с целыми числами 2 и 16-разрядным «коротким», что это большинство систем), которые могут упростить ваши процессы проверки внутри функции. В противном случае переменные типа 'short' не очень помогают, если вы не соответствуете внешней спецификации какого-либо типа. –
@JonathanLeffler почему бы не сделать это ответом? – ouah
«Процесс проверки» - вы имеете в виду проверку переполнения? Как сделать это проще? – user1042840