|
===================================== 〔語彙分解〕的な部分一致の検索結果は以下の通りです。 ・ ー : [ちょうおん] (n) long vowel mark (usually only used in katakana)
ビットフィールド () は、プログラミングにおいてブーリアン型のフラグをコンパクトなビットの並びとして格納する手法である。ビットフィールドの格納には、整数型を使用する。個々のフラグは、ビット単位で格納される。通常は、ソースコードで、個別のビットがフラグに対応する意味を付けられた、2の冪乗の定数が定義される。ビット演算の論理積・論理和・否定の組み合わせが、フラグのセット・リセットとテストを行うために使われる。 ビットフィールドはビット配列とは異なる。ビット配列は、整数でインデックスを付けられた大きなビットの集合を保存するために使用され、コンピュータ言語でサポートされる整数型よりも大きいことがある。ビットフィールドは典型的にはワードサイズの範囲内であり、ビットの表示は数値によるインデックスから独立している。ビットフィールドは、それぞれのフラグのビットインデックスが列挙型の値のビット配列を使用することで、安全かつシンプルで、高速に動作する実装となる。 == 例 == C言語での実装例: 2の冪乗を表すためにハードコードされた数値( 0x08 )を使用する代わりに、ビットシフト演算子を使用した表現を使用すると、ビットマスクを示すものであるというプログラマの意図が明確になり、可読性の観点からすると望ましい。カーニハンとリッチーの本、プログラミング言語Cでは、直接フィールドを定義し、アクセスする方法が記述されている。この方法を使用することで、ビット演算子が不要となり、ビットメンバに構造体メンバと同じようにアクセスすることができる。 struct を使用した例:構造体のビットメンバは実用上は欠点がある。まず、メモリ上のビットの順序はコンパイラによって変化する。加えて、多くの一般的なコンパイラは、ビットメンバの読み書きに対して、非効率なコードを生成する。さらに、ビットフィールドに関しては(特にマルチプロセッサシステムの場合は)、潜在的なスレッドセーフの問題がある。ほとんどのCPUではメモリ上の任意のビットの集合を扱えず、代わりにワード全体をロード/ストアする必要があるためである。以下のコード例はミューテックスを使用したとしても、スレッドセーフではない: ほとんどのCPUでは、 flag とcounter を別々にロードしてストアすることは、ハードウェアレベルで不可能である。(これがスレッドセーフであるためには、counter 自身がスレッドセーフである必要がなくても、flag とcounter の''両方''について、全てのアクセスの前後でミューテックスをロック・アンロックする必要がある。)同様に、ビット順序の問題ため、ビットフィールドが正確にワードサイズの構造である依存性がある。抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「ビットフィールド」の詳細全文を読む スポンサード リンク
|