结构体、位段(位域)详解
结构体大小前边简单介绍了一下,现在对计算结构体的大小进行详细的解释,希望能帮助大家更好的理解结构体和位段。
举个例子:
struct
{double a;//8 8 8 0-7 char b;//1 8 1 8 8-11浪费int c;//4 8 4 12-15int d;//4 8 4 16-19 20-24浪费
}S;
解析:(vs下默认对齐数为8,linux下为4,以下环境为vs)
1.结构体中第一个成员a放在0偏移处,a是double类型,占8个字节,对齐数为8,从0偏移处开始往后放,0-7.
2.b占1个字节,对齐数为1(b自身大小为1,默认为8,较小值为1,即对齐数为1),8是1的倍数,所以从8偏移处开始放,8.
3.c占4个字节,对齐数为4,9-11浪费,从12开始放c,12-15.
4.d占4个字节,对齐数为4,16是4的倍数,从16开始放,16-19.
5.0-19是20个字节,最大对齐数为8,8的倍数最小的为24,20-24浪费.
6.因此,该结构体的大小为24.
位段大小的计算,及计算机的存储方式:
举个例子:
struct
{int a : 2;int b : 10;int c : 5;int d : 20;
}S;
注意:
(1)位段成员的类型必须指定为unsigned或int类型。
(2)一个位段必须存储在同一存储单元中,不能跨两个单元。如果第一个单元空间不能容纳下一个位段,则该空间不用,而从下一个单元起存放该位段。
(3)可以定义无名位段。
(4)从图中可以看出位段是如何存储的,a、b、c放在一个存储单元,为4个字节,剩下的空间放不下d,放在下一个存储单元中,占4个字节,共占8个字节。
结构体、位段(位域)详解相关推荐
- go结构体初始化_go嵌套匿名结构体的初始化详解
go匿名结构体 嵌套匿名结构体的 示例代码片. type debugConfig struct { MaxQueueDepth int `json:"maxQueueDepth"` ...
- c语言结构体成员变量私有化,C语言中结构体变量私有化详解
C语言中结构体变量私有化详解 背景介绍 操作系统 : CentOS7.3.1611_x64 gcc版本 :4.8.5 什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚 ...
- C++中的结构体vector排序详解
C++中的结构体vector排序详解 使用sort函数对一个vector很常用,前提是通文件中必须包含#include ,但是针对结构体vector排序则需要进行一定的改动.具体事例如下所示: // ...
- C语言结构体与指针ppt,c语言指针和结构体:链表详解.ppt
c语言指针和结构体:链表详解.ppt 1,第十一章 链表,2,例跳马.依下图将每一步跳马之后的位置x,y放到一个"结点"里,再用"链子穿起来",形成一条链,相邻 ...
- C/C++结构体字节对齐详解
结构体的sizeof 先看一个结构体: struct S1 { char c; int i; }; sizeof(S1)在VC6中按默认设置得到的结果为8. 我们先看看sizeof的定 ...
- 结构体枚举联合详解(附例题解析)
目录: 结构体的初始化 结构体的内存对齐 位段 -->位段的内存分配 -->位段的跨平台问题 枚举的优点 联合的特点 联合体的大小计算 结构体的初始化 struct Stu {char n ...
- Linux C Socket编程发送结构体、文件详解及实例
利用Socket发送文件.结构体.数字等,是在Socket编程中经常需要用到的.由于Socket只能发送字符串,所以可以使用发送字符串的方式发送文件.结构体.数字等等. 本文:http://www.c ...
- c语言实现结构体变量private,C语言中结构体变量私有化详解
背景介绍 操作系统 : CentOS7.3.1611_x64 gcc版本 :4.8.5 什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate ...
- 32.【C/C++ 结构体全类型 (详解)】
C结构体的应用 (一).什么是结构体? (二).结构体的声明: 2.1介绍一下上面的结构体声明: 2.2struct声明的位置 2.3标记名的可省略性 (三).结构体变量的定义 3.1分配空间 3.2 ...
- 结构体字节对齐详解【含实例】
一.前言 结构体字节对齐属于老生常谈的问题,看似简单,却很容易忘记.而且因为结构体使用的普遍性,使得字节对齐也成为了一个不得不谈的话题. 二.什么是结构体字节对齐 假设现在有一个结构体如下,问你它的一 ...
最新文章
- 【PAT】1007. 素数对猜想 (20)
- Win7系统防火墙设置方法
- 平凡的世界电子书pdf下载_零基础彩铅画入门教程步骤图及全套PDF电子书教程下载!...
- Windows Communication Foundation_1 overview
- 学习使用常用的windbg命令(u、dt、ln、x)
- Codeforces Round #567 (Div. 2)
- Ajax无刷新评论的PHP代码,PHP Ajax实现页面无刷新发表评论
- Gradle下载及安装,配置IDEA
- win10添加网络打印机_windows10安装Hp1010/1012/1015打印机教程
- 关闭appleid双重认证_Apple ID 被停用如何解决?
- 计算机技术与软件专业技术资格 (水平) 考试 - 报考指南
- LCP 03 机器人大冒险(分析-计算运动周期)
- PHP屏蔽错误警告提示
- 呼叫中心电话系统,你了解多少?
- 2023秋招--游卡--游戏客户端--二面面经
- MATLAB中的CVX包使用中的错误:Cannot perform the operation: {convex} .* {convex}
- python asyncio_python中asyncio模块
- 基于SpringBoot的淘宝商城系统
- 【JavaScript设计模式张容铭】抽象工厂模式深度剖析——关于继承与constructor属性的深度理解
- 2022年茶艺师(初级)考试模拟100题及模拟考试
热门文章
- element-vue+echarts 竖状树形图,组织机构图组合
- 荣誉丨云和恩墨受邀参加CDEC2021,获优秀数智生态伙伴奖
- ubuntu18.04部署owncloud
- 【Linux学习】CuteFTP访问VM下ubuntu
- 数据结构 —— B树
- 我最喜爱的英文歌曲列表(没有整理,比较混乱)
- 安装sql server management studio2019发生严重错误0x80070643,更新SSMS2019后出现错误:应用程序无法启动,因为应用程序的并行配置不正确等
- ​一期一会直播预告|OpenCV认证课程:高级部分知识点系统化介绍与拓展 英特尔开发者套件:爱克斯板简介
- jmeter接口测试-post请求
- AI首席架构师5-AICA-文心NLP大模型技术及应用