结构体大小前边简单介绍了一下,现在对计算结构体的大小进行详细的解释,希望能帮助大家更好的理解结构体和位段。

举个例子:

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个字节。

结构体、位段(位域)详解相关推荐

  1. go结构体初始化_go嵌套匿名结构体的初始化详解

    go匿名结构体 嵌套匿名结构体的 示例代码片. type debugConfig struct { MaxQueueDepth int `json:"maxQueueDepth"` ...

  2. c语言结构体成员变量私有化,C语言中结构体变量私有化详解

    C语言中结构体变量私有化详解 背景介绍 操作系统 : CentOS7.3.1611_x64 gcc版本 :4.8.5 什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚 ...

  3. C++中的结构体vector排序详解

    C++中的结构体vector排序详解 使用sort函数对一个vector很常用,前提是通文件中必须包含#include ,但是针对结构体vector排序则需要进行一定的改动.具体事例如下所示: // ...

  4. C语言结构体与指针ppt,c语言指针和结构体:链表详解.ppt

    c语言指针和结构体:链表详解.ppt 1,第十一章 链表,2,例跳马.依下图将每一步跳马之后的位置x,y放到一个"结点"里,再用"链子穿起来",形成一条链,相邻 ...

  5. C/C++结构体字节对齐详解

    结构体的sizeof 先看一个结构体: struct S1 {     char c;     int i; }; sizeof(S1)在VC6中按默认设置得到的结果为8. 我们先看看sizeof的定 ...

  6. 结构体枚举联合详解(附例题解析)

    目录: 结构体的初始化 结构体的内存对齐 位段 -->位段的内存分配 -->位段的跨平台问题 枚举的优点 联合的特点 联合体的大小计算 结构体的初始化 struct Stu {char n ...

  7. Linux C Socket编程发送结构体、文件详解及实例

    利用Socket发送文件.结构体.数字等,是在Socket编程中经常需要用到的.由于Socket只能发送字符串,所以可以使用发送字符串的方式发送文件.结构体.数字等等. 本文:http://www.c ...

  8. c语言实现结构体变量private,C语言中结构体变量私有化详解

    背景介绍 操作系统 : CentOS7.3.1611_x64 gcc版本 :4.8.5 什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate ...

  9. 32.【C/C++ 结构体全类型 (详解)】

    C结构体的应用 (一).什么是结构体? (二).结构体的声明: 2.1介绍一下上面的结构体声明: 2.2struct声明的位置 2.3标记名的可省略性 (三).结构体变量的定义 3.1分配空间 3.2 ...

  10. 结构体字节对齐详解【含实例】

    一.前言 结构体字节对齐属于老生常谈的问题,看似简单,却很容易忘记.而且因为结构体使用的普遍性,使得字节对齐也成为了一个不得不谈的话题. 二.什么是结构体字节对齐 假设现在有一个结构体如下,问你它的一 ...

最新文章

  1. 【PAT】1007. 素数对猜想 (20)
  2. Win7系统防火墙设置方法
  3. 平凡的世界电子书pdf下载_零基础彩铅画入门教程步骤图及全套PDF电子书教程下载!...
  4. Windows Communication Foundation_1 overview
  5. 学习使用常用的windbg命令(u、dt、ln、x)
  6. Codeforces Round #567 (Div. 2)
  7. Ajax无刷新评论的PHP代码,PHP Ajax实现页面无刷新发表评论
  8. Gradle下载及安装,配置IDEA
  9. win10添加网络打印机_windows10安装Hp1010/1012/1015打印机教程
  10. 关闭appleid双重认证_Apple ID 被停用如何解决?
  11. 计算机技术与软件专业技术资格 (水平) 考试 - 报考指南
  12. LCP 03 机器人大冒险(分析-计算运动周期)
  13. PHP屏蔽错误警告提示
  14. 呼叫中心电话系统,你了解多少?
  15. 2023秋招--游卡--游戏客户端--二面面经
  16. MATLAB中的CVX包使用中的错误:Cannot perform the operation: {convex} .* {convex}
  17. python asyncio_python中asyncio模块
  18. 基于SpringBoot的淘宝商城系统
  19. 【JavaScript设计模式张容铭】抽象工厂模式深度剖析——关于继承与constructor属性的深度理解
  20. 2022年茶艺师(初级)考试模拟100题及模拟考试

热门文章

  1. element-vue+echarts 竖状树形图,组织机构图组合
  2. 荣誉丨云和恩墨受邀参加CDEC2021,获优秀数智生态伙伴奖
  3. ubuntu18.04部署owncloud
  4. 【Linux学习】CuteFTP访问VM下ubuntu
  5. 数据结构 —— B树
  6. 我最喜爱的英文歌曲列表(没有整理,比较混乱)
  7. 安装sql server management studio2019发生严重错误0x80070643,更新SSMS2019后出现错误:应用程序无法启动,因为应用程序的并行配置不正确等
  8. ​一期一会直播预告|OpenCV认证课程:高级部分知识点系统化介绍与拓展 英特尔开发者套件:爱克斯板简介
  9. jmeter接口测试-post请求
  10. AI首席架构师5-AICA-文心NLP大模型技术及应用