重複の可能性:
「unsigned temp:3」の意味
私はいくつかのカーネルコードを学んでおり、次の行に沿って行きました(Linux 2.4では、sched.h、struct mm_struct):
unsigned dumpable:1;
これは何を意味するのでしょうか?
重複の可能性:
「unsigned temp:3」の意味
私はいくつかのカーネルコードを学んでおり、次の行に沿って行きました(Linux 2.4では、sched.h、struct mm_struct):
unsigned dumpable:1;
これは何を意味するのでしょうか?
ビットフィールドメンバーです。あなたのコードはdumpable
、構造内で正確に1ビットを占めることを意味します。
ビットフィールドは、メンバーをビットレベルでパックする場合に使用されます。これにより、構造体に多くのフラグがある場合に使用されるメモリのサイズを大幅に削減できます。たとえば、既知の数値制約を持つ 4 つのメンバーを持つ構造体を定義するとします。
0 < a < 20
b in [0, 1]
0 < c < 8
0 < d < 100
次に、構造体を次のように宣言できます
struct Foo {
unsigned a : 5; // 20 < 2^5 = 32
unsigned b : 1; //
unsigned c : 3; //
unsigned d : 7; // 100 < 2^7 = 128
};
Fooのビットは次のように配置できます
ddddddd c cc b aaaaa
--------- --------- --------- ----------
octet 1 octet 0
===========================================
uint32
それ以外の
struct Foo {
unsigned a;
unsigned b;
unsigned c;
unsigned d;
};
値の範囲のために多くのビットが無駄になる
# wasted space which is not used by the program
# v v
ddddddd ccc
------------------------------------ ------------------------------------
uint32 uint32
b aaaaa
------------------------------------ ------------------------------------
uint32 uint32
多くのメンバーをまとめることでスペースを節約できます。
C 標準では、「アドレス指定可能なストレージ ユニット」内でビットフィールドを配置またはパックする方法を指定していないことに注意してください。また、ビットフィールドは直接メンバー アクセスに比べて低速です。
これはビットフィールドであることを意味します。つまり、dumpable のサイズは 1 ビットであり、0 または 1 のみを割り当てることができます。通常、スペースを節約するために古いコードで使用されるか、ハードウェアとインターフェイスする低レベルのコードで使用されます (パッキングは移植性がありませんが)。詳しくはこちら
私の記憶が正しければ、構造体の中で使用した場合、コロンの後の数字は、変数 (またはビットフィールド) を構成するビット数を表します。
単一unsigned dumpable:1;
ビットのビットフィールドも同様です。