结构体位域的内存分布
区别一下两种规则:
- 如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字段将紧邻前一个字段存储,直到不能容纳为止。
- 如果相邻的位域字段的类型不同,则各编译器的具体实现有差异,VC6采取不压缩方式,Dev-C++,GCC采取压缩方式;
在 Windows 的VS下面进行编译:
- (1)最大的数据类型为 int :所以是 4 字节对齐。
- (2)如果相邻位域字段的类型相同,紧邻着前一个字段进行存储。(所以char 与 char 会紧邻着进行存储,直到不能容纳为止)
在 Ubuntu 下面使用 gcc 来进行编译:
- 如果相邻的位域字段的类型不同,则各编译器的具体实现有差异,VC6采取不压缩方式,Dev-C++,GCC采取压缩方式;
- 最大的数据类型为 int :所以是 4 字节对齐。
- 这边编译器是 VC ,所以不压缩。
如果是 gcc 编译器:就是采用压缩的方式,4字节。
补充: