使用uint_fast8_t时的性能优势?

时间:2009-12-23 16:23:30

标签: iphone types game-engine

所以在研究了很多引擎后,我一直在为iphone构建一个2d框架。如您所知,引擎架构的世界非常广泛,所以我一直在努力尽可能地应用最佳实践。

我一直在使用:

uint_fast8_t mId;

如果我查找uint_fast8_t的定义,我会发现:

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

我一直在我的代码中使用这些类型 - 我的问题是,使用这些类型是否有性能优势?幕后究竟发生了什么?除了显而易见的事实,这是数据的正确数据类型(无符号8位整数),是否值得在我的代码中使用它?

这是一个不必要的优化,编译器可能会照顾它吗?

感谢。

编辑:没有回复/答案,所以我对此给予了赏识!

3 个答案:

答案 0 :(得分:21)

“快速”整数类型被定义为最快的整数类型,至少所需的位数(在本例中为8)。

如果您的平台将uint_fast8_t定义为uint8_t,那么速度绝对没有区别。

原因是在不使用其原生字长时,可能存在速度较慢的架构。例如。我可以找到一个参考,其中Alpha处理器uint_fast_8_t被定义为“unsigned int”。

答案 1 :(得分:3)

uint_fast8_t是保证至少8位宽的最快整数。根据您的平台,它可以是8或16或32位宽。

它不是由编译器本身处理的,它确实使程序执行得更快

以下是我找到的一些资源,您可能已经看过它们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

答案 2 :(得分:-1)

在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大小