7

それで、エンジンをたくさん研究した後、私は iPhone 用の 2D フレームワークを構築してきました。ご存じのとおり、エンジン アーキテクチャの世界は広大であるため、ベスト プラクティスを可能な限り適用するように努めてきました。

私は使用しています:

uint_fast8_t mId;

uint_fast8_t の定義を調べると、次のことがわかります。

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

そして、コード全体でこれらの型を使用してきました-私の質問は、これらの型を使用することでパフォーマンス上の利点はありますか? そして、舞台裏で正確に何が起こっているのでしょうか? これがデータの正しいデータ型 (符号なし 8 ビット整数) であるという明白な事実に加えて、コード全体にこれを追加する価値はありますか?

とにかく、コンパイラがおそらく処理する不必要な最適化ですか?

ありがとう。

編集:応答/回答がないので、これに賞金をかけています!

4

3 に答える 3

23

「高速」整数型は、少なくとも必要なビット数 (この場合は 8) で利用可能な最速の整数型として定義されます。

プラットフォームが uint_fast8_t を uint8_t として定義している場合、速度にまったく違いはありません。

その理由は、ネイティブの語長を使用しないと遅くなるアーキテクチャが存在する可能性があるためです。たとえば、Alpha プロセッサの場合、uint_fast_8_t が「unsigned int」と定義されているリファレンスを 1 つ見つけることができました。

于 2010-01-08T17:00:33.970 に答える
3

uint_fast8_t は、少なくとも 8 ビット幅であることが保証されている最速の整数です。プラットフォームに応じて、8 ビット、16 ビット、または 32 ビット幅になります。

コンパイラ自体では処理されません。実際にプログラムの実行速度が向上します

ここに私が見つけたいくつかのリソースがあります.あなたはすでにそれらを見たことがあるかもしれません.

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

于 2010-01-08T17:22:28.873 に答える
-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;

これは ARM やその他のアーキテクチャにも当てはまります。ナロー型を使用すると、多くの状況でゼロ拡張または符号拡張が必要になり、ネイティブ int よりも最適ではないためです。

ただし、大規模な配列やケース、または低速の操作 (除算など) ではメリットがあります。ARM除算がどれだけ遅いかはわかりませんが、x86では64ビット除算は32ビットまたは8ビット除算よりもはるかに遅いです

于 2014-01-25T06:20:15.890 に答える