1

私は現在、atmel(Atmega328)の8ビットマイクロコントローラー用にcでプログラミングしています。プログラムでは、何千もの 2 ビット整数を格納する 8 ビット配列を持っているため、プログラム メモリ空間に配置されます。現在、各バイトに 4 つの 2 ビット整数を入れていますが、よく考えるとばかげているように思えます...

16 ビット値の配列を使用し、各位置に 8 つの 2 ビット変数を格納する方が効率的ではないでしょうか?

マイクロコントローラ (atmega328p) は、各マシン命令に 16 ビットを備えた 8 ビット IC です。

4

2 に答える 2

1

これは 8 ビット レジスタを備えた 8 ビット プロセッサであるため、アセンブリ言語でプログラミングする場合、16 ビット オペランドを操作しても改善されません。しかし、c コンパイラーの場合はもっと複雑です。int サイズは通常、私が知っているほとんどすべてのコンパイラで少なくとも 16 ビットであるため、コンパイラが 8 ビット オペランドを 16 ビット演算を実行する 16 ビット オペランドに変換する可能性は絶対にあります。

したがって、分解は本当に進むべき道です。

于 2013-02-05T18:52:59.113 に答える
1

どうすればより効率的になりますか?

スペース効率

2 ビット整数は 2 ビットを使用します。それ以上のことはできません。

時間効率

それらをどのようにパックしても、より大きな値から 2 ビットの数値を抽出するには、同じ量のビット演算を実行する必要があります。

于 2013-02-05T18:39:49.963 に答える