结构体与位域的对齐
来源:互联网 发布:销售清单打印软件 编辑:程序博客网 时间:2024/06/08 20:06
位域:
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语言 结构体的内存对齐问题与位域
- Ubuntu16.04安装ROS Kinetic
- .Net学习笔记-.Net基础1.2 循环与数组
- opencv实现巴特沃斯高通滤波器对指纹图像进行锐化处理
- 集成学习基本原理:Adaboost,Bagging和Stacking
- Scala集合操作实战
- 结构体与位域的对齐
- 跨域请求
- 算法题目--Longest Substring Without Repeating Characters
- 【模板】LCT
- 76. Minimum Window Substring
- 装饰者模式
- Hadoop(四) MapReduce+Yarn运行机制
- Ubuntu Server 14.04 安装Web服务器(Linux+Apache+MySQL+PHP) 本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http
- Database-数据类型(常用)