结构体与位域的对齐
来源:互联网 发布:mysql两表关联查询 编辑:程序博客网 时间:2024/05/19 06:16
位域:
C99规定int、unsigned int和bool可以作为位域类型,但编译器几乎都对此作了扩展,
允许其它类型类型的存在。
使用位域的主要目的是压缩存储,其大致规则为:
1) 如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字段将紧邻前一个字段存储,直到不能容纳为止;
2) 如果相邻位域字段的类型相同,但其位宽之和大于类型的sizeof大小,则后面的字段将从新的存储单元开始,其偏移量为其类型大小的整数倍;(经测试此条好像仅限于char型,整型可以跨域存储)
3) 如果相邻的位域字段的类型不同,则各编译器的具体实现有差异,VC6采取不压缩方式,Dev-C++采取压缩方式;
4) 如果位域字段之间穿插着非位域字段,则不进行压缩;
5) 整个结构体的总大小为最宽基本类型成员大小的整数倍。
***************************************************************************/
struct s1
{
int i: 8;
int j: 4;
int a: 3;
double b;
};
struct s2
{
int i: 8;
int j: 4;
double b;
int a:3;
};
printf("sizeof(s1)= %d\n", sizeof(s1));
printf("sizeof(s2)= %d\n", sizeof(s2));
result: 16, 24
第一个结构体中,i,j,a共占15个位,不足8个字节,按double 8字节对齐,共16字节
- 结构体与位域的对齐
- 结构体与位域的对齐:
- 结构体与位域的对齐
- 结构体与位域的对齐
- 结构体的内存对齐问题与位域
- 结构体的内存对齐问题与位域
- 位域与结构体对齐
- 位域与结构体对齐
- 位域与结构体对齐
- 位域与结构体对齐
- 位域与结构体对齐
- 带有位域的结构体对齐
- 位域结构体的字节对齐
- “位域”与结构体内部对齐、结构体外部对齐(自己定义的)
- 结构体对齐(图解)与位域
- 结构体内存对齐与位域
- C语言 结构体的内存对齐问题与位域
- C语言 结构体的内存对齐问题与位域
- python-Imaging模块安装
- hdu3496 Watch The Movie
- UVaOJ 299 - Train Swapping
- Linux中/etc/init.d
- 百度网盘邀请码
- 结构体与位域的对齐
- SQL SERVER CTE递归算法
- GetWindowLong (hwnd, 0)
- xheditor使用与python结合使用
- android音频波形图绘制
- 字符字符串和指针相关的内容的总结
- SQLite剖析(5):体系结构
- 最大流+二分Secret Milking Machine
- 看懂与领悟其中奥妙的差距