3

ブール変数の最適なサイズはデータの自然な幅であると私は信じるようになりました。つまり、C /C++ではintです。したがって、最近のプロセッサの場合、これは通常32ビットです。たとえば、マシンレベルでバイトとして宣言するには、32ビットのフェッチとマスクが必要です。

ただし、iOSのBOOLは8ビットであることがわかりました。私は、バイトを使用する人々が8ビットプロセッサからの残りのアイデアを使用していると想定していました。

この質問は用途によって異なり、ほとんどの場合、言語で定義されたブール値が最善の策ですが、外部ソースから到着するコードを変換する場合や、必要な場合など、独自に定義する必要がある場合があります。クロスプラットフォームコードを記述します。

ブール値がシリアルストリームにパックされる場合、イーサネットなどのシリアル回線を介して送信したり、格納したりする場合は、ブール値をより少ないビットでパックすることが最適な場合があることも重要です。しかし、プロセッサの最適なサイズでパックおよびアンパックするのが最適である可能性が高いと思います。

だから私の質問は、32ビットプロセッサのブール値の最適なサイズは32ビットであると考えるのは正しいですか?もしそうなら、iOSはなぜ8ビットを使用するのですか?

4

3 に答える 3

2

うん、あなたは正しいです。8 ビットを使用する大きな利点は、より多くのものを構造体にうまく詰め込めることです。

もちろん、そのような場合はフラグを使用するのが最善です。

ただし、大きな問題は、C/C++ の "bool" では、その大きさが必ずしもわからないことです。これは、別のプラットフォームで壊れる可能性がなければ、構造体に関する仮定 (ディスクへのバイナリ書き込みなど) を行うことができないことを意味します。このような場合、既知のサイズの変数を使用すると非常に便利であり、構造体をディスクにダンプする場合は、使用するスペースをできるだけ少なくすることができます。

于 2012-07-19T13:28:36.997 に答える
1

アーキテクチャに依存しますが、多くの 32 ビット アーキテクチャでは、8 ビット アドレッシングは 32 ビットよりも効率的です。「フェッチとマスキング」自体は、ハードウェア ロジックで実行されます。

記憶域の観点から最適なサイズは、もちろん 1 ビットです。たとえば、ビット フィールドまたはビット マスキングを使用して、複数のブール値を 1 つの単語にまとめることができます。8051 などの一部のアーキテクチャには、ビット アドレス指定可能なメモリがあります。最新の ARM Cortex-M アーキテクチャでは、メモリとハードウェア レジスタをビット アドレス指定可能にするビットバンディングと呼ばれる手法が採用されています。

于 2012-07-19T13:41:34.170 に答える