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


在 Ubuntu 下面使用 gcc 来进行编译:

- 如果相邻的位域字段的类型不同,则各编译器的具体实现有差异,VC6采取不压缩方式,Dev-C++,GCC采取压缩方式;
- 最大的数据类型为 int :所以是 4 字节对齐。
- 这边编译器是 VC ,所以不压缩。


如果是 gcc 编译器:就是采用压缩的方式,4字节。

补充:

本文探讨了结构体位域在内存中的分布规则,重点比较了Windows环境下Visual Studio与Ubuntu下GCC编译器的不同处理方式。VS遵循4字节对齐,相同类型位域连续存储;而GCC在类型不同的位域相邻时采取压缩方式,以节省内存。理解这些差异对于跨平台编程至关重要。
2628

被折叠的 条评论
为什么被折叠?



