Производительность при использовании uint_fast8_t? - PullRequest
6 голосов
/ 23 декабря 2009

Итак, после тщательного изучения движков я разработал 2d-фреймворк для iphone. Как вы знаете, мир архитектуры движков огромен, поэтому я стараюсь максимально использовать лучшие практики.

Я использовал:

uint_fast8_t mId;

Если я найду определение uint_fast8_t, то найду:

/* 7.18.1.3 Fastest-width integer types */
...
typedef uint8_t          uint_fast8_t;

И я использовал эти типы во всем коде - мой вопрос, есть ли выигрыш в производительности при использовании этих типов? И что именно происходит за кулисами? Помимо очевидного факта, что это правильный тип данных (8-разрядное целое число без знака) для данных, стоит ли это заразить в моем коде?

Является ли это ненужной оптимизацией, которую компилятор, вероятно, позаботится в любом случае?

Спасибо.

Изменить: Нет ответов / ответов, поэтому я вознаграждаю за это!

Ответы [ 3 ]

21 голосов
/ 08 января 2010

«быстрые» целочисленные типы определены как самые быстрые целочисленные типы, доступные с не менее количеством требуемых битов (в данном случае 8).

Если ваша платформа определяет uint_fast8_t как uint8_t, то в скорости не будет абсолютно никакой разницы.

Причина в том, что могут быть архитектуры, которые работают медленнее, если не использовать собственную длину слова. Например. Я мог бы найти одну ссылку, где для процессоров Alpha был определен uint_fast_8_t как «unsigned int».

3 голосов
/ 08 января 2010

uint_fast8_t - это самое быстрое целое число, ширина которого должна быть не менее 8 бит.В зависимости от вашей платформы он может иметь ширину 8, 16 или 32 бита.

Сам компилятор не заботится об этом, он действительно заставляет вашу программу выполняться быстрее

Вот некоторые ресурсы Iнайдено, возможно, вы уже видели их http://embeddedgurus.com/stack-overflow/2008/06/efficient-c-tips-1-choosing-the-correct-integer-size/

http://www.mail-archive.com/avr-gcc-list@nongnu.org/msg03149.html

0 голосов
/ 25 января 2014

в mingw64 было сказано так

/*  7.18.1.3  Fastest minimum-width integer types
 *  Not actually guaranteed to be fastest for all purposes <---------------------
 *  Here we use the exact-width types for 8 and 16-bit ints.
 */
typedef signed char int_fast8_t;
typedef unsigned char uint_fast8_t;
typedef short  int_fast16_t;
typedef unsigned short  uint_fast16_t;
typedef int  int_fast32_t;
typedef unsigned  int  uint_fast32_t;
__MINGW_EXTENSION typedef long long  int_fast64_t;
__MINGW_EXTENSION typedef unsigned long long   uint_fast64_t;

так что я думаю, что все еще рекомендуется использовать собственный размер int, за исключением больших массивов

...