含位域结构体的sizeof

    技术2022-05-20  31

    使用位域的主要目的是压缩存储,其大致规则为:1) 如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字段将紧邻前一个字段存储,直到不能容纳为止;2) 如果相邻位域字段的类型相同,但其位宽之和大于类型的sizeof大小,则后面的字段将从新的存储单元开始,其偏移量为其类型大小的整数倍;3) 如果相邻的位域字段的类型不同,则各编译器的具体实现有差异,VC6采取不压缩方式,Dev-C++采取压缩方式;4) 如果位域字段之间穿插着非位域字段,则不进行压缩;5) 整个结构体的总大小为最宽基本类型成员大小的整数倍。测试:struct test {  char a:1;  char :2;  long b:3;  char c:2; }; test t1; int len=sizeof(t1);   //len=12struct test {  char a:1;  char :2;  char b:3;  long c:2; }; test t1; int len=sizeof(t1);   //len=8struct test {  char a:1;  char :2;  char b:3;  char c:2; }; test t1; int len=sizeof(t1);   //len=1

    原文地址: http://www.cnitblog.com/wuzhimeili/archive/2007/01/17/21963.html


    最新回复(0)