1

rt、たとえば xv6 コード mmu.h では、segdesc は次のように設計されています

struct segdesc {
  uint lim_15_0 : 16;  // Low bits of segment limit
  uint base_15_0 : 16; // Low bits of segment base address
  uint base_23_16 : 8; // Middle bits of segment base address
  uint type : 4;       // Segment type (see STS_ constants)
  uint s : 1;          // 0 = system, 1 = application
  uint dpl : 2;        // Descriptor Privilege Level
  uint p : 1;          // Present
  uint lim_19_16 : 4;  // High bits of segment limit
  uint avl : 1;        // Unused (available for software use)
  uint rsv1 : 1;       // Reserved
  uint db : 1;         // 0 = 16-bit segment, 1 = 32-bit segment
  uint g : 1;          // Granularity: limit scaled by 4K when set
  uint base_31_24 : 8; // High bits of segment base address
};

base が base_15_0、base_23_16、base_31_24 として定義されているのに、'uint base' ではないのはなぜですか?

各サブフィールドには特別な意味があるため、全体としてではなく個別に保存するとアクセスが便利になることも一因だと思います。しかし、その推測が完全で正しいかどうかはわかりません

4

1 に答える 1