9

msgpcc (MSP430 マイクロコントローラ用の GCC)マニュアルの著者は次のように書いています。

関数内で小さな整数が必要な場合は、char または unsigned char の代わりに int を使用します。生成されるコードはより効率的になり、ほとんどの場合、ストレージは実際には無駄になりません。

なぜintより効率的なのですか?

アップデート。そして、なぜ(u)int_fast8_tmspgcc で(unsigned) charではなくに定義されているのでしょうか(unsigned) int。私が理解(u)int_fast*_tしているように、十分なサイズの最も効率的な型に定義する必要があります。

4

4 に答える 4

5

一般的な経験則では、CPU はネイティブ ワード サイズの整数を処理するのが最も高速です。

もちろん、これは完全にアーキテクチャに依存します。その点について詳しくは、この同様の質問への回答を参照してください。

于 2013-11-25T15:40:49.637 に答える
5

TI は、Tiva-C (旧称 Stellaris) MCU のトピックに関するアプリケーション ノートを公開しています。

「はじめに」セクションの表には、パフォーマンスとサイズに影響を与える要因のリストが示されています。因子ラベル変数サイズは、最適より小さい変数を使用すると、拡張に署名または署名解除するための余分な命令を意味する可能性があります...と述べています。

また、「変数のサイズ」セクションの下に、次のように記載されています。

「ローカル変数がレジスターのサイズよりも小さい場合、通常、追加のコードが必要になります。Stellaris パーツでは、これは、サイズがバイトとハーフワード (それぞれ char と short int) のローカル変数に追加のコードが必要であることを意味します。 8 ビットまたは 16 ビットのマイクロコントローラでは、(大きすぎる問題を回避するために) ローカルが小さいサイズに変換されている可能性があります。これは、そのようなコードの実行が遅くなり、必要以上に多くのコード スペースが必要になることを意味します。」

参照してください: http://www.ti.com/lit/an/spma014/spma014.pdf

以下はコンパイラによって処理されますが、目前の問題に関連しています。

MSP430 は 16 ビットのマイクロプロセッサです。char はわずか 8 ビットであり、すべてのワードが整列されるようにパッキングする必要があります。たとえば、3 文字はメモリ内で適切に配置されません。代わりに、常にアラインされる 16 ビットの整数を使用してください。

16 の倍数 (16 と 32 など) の可変サイズを使用すると、メモリをより効率的に利用することもできます。メモリを整列させるためにパディングが行われることはありません。

于 2013-11-25T15:45:26.367 に答える
1

int問題のプロセッサのネイティブ サイズ (16 ビット) と一致するため、unsigned char変数へのストアを要求すると、値が 0 ~ 255 であることを確認するためにコンパイラが追加のコードを発行する必要がある場合があります。

于 2013-11-25T15:53:48.063 に答える