#pragma  设置编译器的属性;

pack(1) 对齐方式的属性;按照个字节1对齐;

#pragma pack(1)里面的数字是1,2, 4,8,16 其他的就是默认的方式8;

pack(2)如果比结构体中最大的类型还大。如#pragma pack(16)那么忽略最大类型,按默认8的进行分配空间;

下面再举个例子,交换一下上面的MyStruct的成员变量的位置,使它变成下面的情况:

  struct MyStruct { char dda; double dda1;   int type };#pragma pack(1)=13
#pragma pack(2)=14
#pragma pack(4)=16
#pragma pack(8)=24
#pragma pack(16)=24

这个结构占用的空间为多大呢?在VC6.0环境下,可以得到sizeof(MyStruc)为24。结合上面提到的分配空间的一些原则,
  分析下VC怎么样为上面的结构分配空间的。(简单说明)
  struct MyStruct 
  { 
  char dda;//偏移量为1,满足对齐方式sizof(char),dda占用个字节1;
  double dda1;//下一个可用的地址的偏移量为1,不是sizeof(double)=8 的倍数,需要补足7个字节才能使偏移量变为(满足对齐方式),因此VC自动填充7个字节,dda1存放在偏移量为8的地址上,它占用8个字节。
  int type;//下一个可用的地址的偏移量为16,是sizeof(int)=4的倍数,满足int的对齐方式,所以不需要VC自动填充,type存放在偏移量为20的地址上,它占用4个字节。
  };
所有成员变量都分配了空间,空间总的大小为+7+8+4=20,不是结构的节边界数(即结构中占用最大空间的类型所占用的字节数sizeof (double)=8)的倍数,所以需要填充个字节,以满足结构的大小为sizeof(double)=8的倍数。
所以该结构总的大小为:sizeof(MyStruc)为+7+8+4+4=24。
其中总的有7+4=11个字节是VC自动填充的,没有放任何有意义的东西。

结构体空间的大小计算相关推荐

  1. 结构体大小计算与位域大小计算

    结构体大小计算与位域大小计算 本博文纯属个人理解,有错误请多指正. 首先,各个变量所占的字节: 类型 字节(64位) 字节(32位) char 1 1 unsigned char 1 1 short ...

  2. AlexNet网络结构详解(含各层维度大小计算过程)与PyTorch实现

    AlexNet网络结构详解(含各层维度大小计算过程)与PyTorch实现 1.AlexNet之前的思考 2.AlexNet网络结构 3.AlexNet网络结构的主要贡献 4.PyTorch实现     ...

  3. 【C 语言】二级指针作为输入 ( 二维数组 | 二维数组内存大小计算 | 指针跳转步长问题 )

    文章目录 一.二维数组内存大小计算 二.二维数组内存大小意义 一.二维数组内存大小计算 给定一个二维数组 : 该 二维数组 中有 444 个 一维数组 , 每个一维数组有 101010 个 char ...

  4. C++ 类的定义、作用域及大小计算,限定访问符,this指针

    C++ 4 类与对象(上) 面向对象的特点 类的定义 访问限定符 类的作用域 类的大小计算 this指针 this指针的特性 面向对象的特点 抽象 封装 继承 多态 类的定义 类的两种定义方式: 1. ...

  5. Java对象内存空间大小计算

    一.查看基础类型的对象内存大小 八股文中很明确的告诉你了基础类型的大小 ,如下图: 类型 值大小(byte) 对象内存大小(byte) 备注 byte 1 16 char 2 16 int 4 16 ...

  6. C语言中如何计算结构体的字节大小

    结构体内存对齐 在计算结构体所占字节的大小时,不要直观地累加结构体内成员的字节大小,实际结构体存放在内存中是有一定的规则的,这里涉及的规则就是内存对齐原则. 声明一个结构体stu struct stu ...

  7. 对于类对象模型的理解(类大小计算+大小端字节序)

    类对象模型 如何理解类与对象 类: 通俗理解,类相当于一个模型框架,限定了类有哪些成员变量,但从底层来看,内存并没有分配实际的物理空间来存储类 对象: 类对象即为类的具体描述,当类对象进行实例化过程中 ...

  8. LPCM AAPCM G711 G726 AAC 音频采样、编码及帧大小计算

    LPCM LPCM: linear pulse code modulation     LPCM,即线性脉冲编码调制,是一种非压缩音频数字化技术,是一种未压缩的原音重现,在普通CD.DVD及其他各种要 ...

  9. 中心差分法 matlab,(最新整理)结构动力学使用中心差分法计算单自由度体系动力反应的MATLAB程序...

    <(最新整理)结构动力学使用中心差分法计算单自由度体系动力反应的MATLAB程序>由会员分享,可在线阅读,更多相关<(最新整理)结构动力学使用中心差分法计算单自由度体系动力反应的MA ...

最新文章

  1. “树人杯”暨第三届辽宁科技大学校园程序设计竞赛正赛I 充分利用学习卡(粉)...
  2. spark计算TF-IDF值(中文)
  3. Mybatis注解实现一对多关联映射(@Many)
  4. JavaScript——定时器(setTimeout/setInterval)
  5. 框架中的Blob数据的定义
  6. webstore报 ESLint: Expected space or tab after '//' in comment.(spaced-comment)
  7. 【BZOJ-1324】Exca王者之剑 最小割
  8. 物理内存是如何组织管理的
  9. 蓝桥杯备赛第一天-138译码器
  10. 软件测试流程图及描述
  11. aes key iv从mysql_OpenSSL AES 算法中 Key 和 IV 是如何生成的?
  12. “学霸系统”之NABC
  13. 基于因子分析法分析新冠肺炎疫情对房地产业上市公司财务的影响
  14. java 线程的插队运行_java笔记–线程的插队行为
  15. 从bam中截取指定位置的 reads 或深度
  16. 信息化、数字化、数智化
  17. 服务器虚拟环境使用指南
  18. 快速调整 图片的 像素大小
  19. Python爬虫:BeautifulSoup的find()和findAll()
  20. C语言流控制命令的总结

热门文章

  1. 计算机三级网络技术知识点大纲,全国计算机等级三级网络技术考试大纲
  2. Revit-BIM模型轻量化 关于合批(merge)那些小技巧
  3. HEVC标准概览-很概括很详细
  4. 那些没有听过且很火概念(持续更新)
  5. Use Case框图
  6. ERP管理软件中“集成”的七个管理思想[转]
  7. 试卷分析的四个度:难度、区分度、信度、效度
  8. 「Azure」数据分析师有理由爱Azure之五-Azure Analysis Services服务实操
  9. Qt5教程(七):模态/非模态对话框
  10. Unix命令运行tomcat