Пояснение почему int следует предпочитать длинным / коротким в c ++? - PullRequest
3 голосов
/ 27 июня 2011

Я где-то читал, что тип данных int дает лучшую производительность (по сравнению с длинной и короткой) независимо от ОС, поскольку ее размер изменяется в соответствии с размером слова ОС.Где long и short занимают 4 и 2 байта, которые могут совпадать или не совпадать с размером слова OS.Кто-нибудь может дать хорошее объяснение этому?

Ответы [ 5 ]

4 голосов
/ 27 июня 2011

Из стандарта:
3.9.1, §2:

Существует пять типов целых чисел со знаком: "подписанный символ", "короткий int", "int", "long int" и "long long int". В этот список, каждый тип обеспечивает как минимум столько памяти, сколько предшествующих в списке. Простые интты имеют натуральный размер, предложенный архитектура исполнения окружающая среда (44); другой подписал целые типы предоставляются для удовлетворения особые потребности.

Таким образом, вы можете сказать char <= short <= int <= long <= long long. <br> Но вы не можете сказать, что short - это 2 байта, а long - 4.

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

4 голосов
/ 27 июня 2011

int традиционно является наиболее «естественным» целочисленным типом для машины, на которой должна выполняться программа. Что подразумевается под «наиболее естественным», не слишком ясно, но я ожидаю, что это будет не медленнее, чем другие типы. Более важно, пожалуй, то, что существует почти универсальная традиция использования int в предпочтении другим типам, когда нет веских оснований поступать иначе. Использование других целочисленных типов заставит опытного программиста C ++ при чтении кода спросить почему.

2 голосов
/ 27 июня 2011

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

Приветствия & hth.

1 голос
/ 27 июня 2011

int не дает лучшей производительности, чем другие типы.Действительно, на большинстве современных платформ все целочисленные типы будут работать одинаково, за исключением long long.Если вы хотите получить «самое быстрое» целое число, доступное на вашей платформе, C ++ не даст вам способа сделать это.

С другой стороны, если вы хотите использовать вещи, определенные в C99, вы можете использовать один из определенных здесь типов "fastint".

Кроме того, на современных машинах иерархия памятив большинстве случаев важнее, чем вычисления процессора.Использование целочисленных типов меньшего размера позволяет разместить больше целых чисел в кэше ЦП, что повысит производительность практически во всех случаях.

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

Не выбирайте тип данных из-за внутренней "скорости" - выберите правильный тип данных для решенияпроблема, которую вы хотите решить.

1 голос
/ 27 июня 2011
  1. short только оптимизировать размер хранилища;вычисления всегда распространяются на int, если это применимо (т. е. если только short не имеет одинаковый размер)

  2. , не уверенный в том, что int следует отдавать предпочтение длинным;очевидный случай, когда емкости int недостаточно

Вы уже упомянули собственный размер слова, поэтому я оставлю это

...