C++结构体对齐和位域

C++结构体对齐:

(1)各元素对齐:各元素的偏移量应为该元素大小的整数倍。特殊:结构体元素的偏移量应为其包含的最大基本类型元素的大小的整数倍

(2)整体对齐:结构体大小应为结构体内最大元素的整数倍,当包含结构体元素时,找最大元素时需要把所有结构体拆散来看,

找出最大的基本类型

可以用#pragma pack(n)改变对齐大小


Union对齐:需要按Union中最大的基本类型来对齐。


位域:

struct bits {
int b1 : 4;
int : 2; // 0 表示跳过这个byte
int b2 : 1;
};

struct大小为最大基本类型的整数倍。一个位域必须存储在同一个字节中,不能跨两个字节。

如一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域。也可以有意使某位域从下一单元开始。

你可能感兴趣的:(C++结构体对齐和位域)