我们知道在一个结构体当中,往往为了节省内存空间,会花点心思进行字节对齐。
然而往往为了更细化,可使用bool(c++)或者enum获得更小的容器来节省空间,但是1个字节已经成为下限,如果有8个成员变量,取值范围是1和0的话,也需要8个字节,如果节省更多的空间呢?
C经典语法类型,表示bit方式可以如下:
再结合实际情况,用实际的最大值,结合字节对齐,就可以节省更多的内存空间,大家在工程中不妨试试哟!
typedef struct __aligning针对上面的struct:aligning1,我们使用sizeof计算会得到12个字节,显然没有符合4字节对齐的方式,以下写法更为科学:
{
unsigned short n;
unsigned int m;
unsigned short x;
} aligning1;
typedef struct __aligning此时struct会占用8个字节。
{
unsigned short n;
unsigned short x;
unsigned int m;
} aligning2;
然而往往为了更细化,可使用bool(c++)或者enum获得更小的容器来节省空间,但是1个字节已经成为下限,如果有8个成员变量,取值范围是1和0的话,也需要8个字节,如果节省更多的空间呢?
C经典语法类型,表示bit方式可以如下:
typedef struct __aligning这样最多也就4个字节,其实4个字节可以最多表示32个成员变量,每个变量1bit;
{
unsigned n:1;
unsigned m:1;
...
unsigned t:1;
} aligning3;
再结合实际情况,用实际的最大值,结合字节对齐,就可以节省更多的内存空间,大家在工程中不妨试试哟!