プログラミングメモ


  • ビットフィールド
typedef union {
  u_int32_t command;
  struct {
    unsigned none       : 2;
    unsigned reg        : 6;
    unsigned function   : 3;
    unsigned device     : 5;
    unsigned bus        : 8;
    unsigned reserve    : 7;
    unsigned enabled    : 1;
  } p;
} pci_param;
 
でも、使い方によっては移植性に問題があるらしい?
きれいに書けるのにね。
ビット構造体は、上位から定義するか下位から定義するか、コンパイラーによって差があるので注意が必要。
殆どのC/C++コンパイラーは、この機能を重視していないためか、非効率なコードを出力する。更には、この処理にバグがあるコンパイラーも存在した。
また、スレッドセーフな動作をするのかどうかという、コンパイラーの仕様に基づく問題点がある。
コードサイズや速度などを重視する場合は、ビットフィールドは用いず、ビット演算などを使う方が無難である。
http://www.wdic.org/w/TECH/%E3%83%93%E3%83%83%E3%83%88%E3%83%95%E3%82%A3%E3%83
%BC%E3%83%AB%E3%83%89%20(%E6%A7%8B%E9%80%A0%E4%BD%93)
最終更新:2011年11月08日 11:28
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。