结构体空间的大小计算
#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自动填充的,没有放任何有意义的东西。
结构体空间的大小计算相关推荐
- 结构体大小计算与位域大小计算
结构体大小计算与位域大小计算 本博文纯属个人理解,有错误请多指正. 首先,各个变量所占的字节: 类型 字节(64位) 字节(32位) char 1 1 unsigned char 1 1 short ...
- AlexNet网络结构详解(含各层维度大小计算过程)与PyTorch实现
AlexNet网络结构详解(含各层维度大小计算过程)与PyTorch实现 1.AlexNet之前的思考 2.AlexNet网络结构 3.AlexNet网络结构的主要贡献 4.PyTorch实现 ...
- 【C 语言】二级指针作为输入 ( 二维数组 | 二维数组内存大小计算 | 指针跳转步长问题 )
文章目录 一.二维数组内存大小计算 二.二维数组内存大小意义 一.二维数组内存大小计算 给定一个二维数组 : 该 二维数组 中有 444 个 一维数组 , 每个一维数组有 101010 个 char ...
- C++ 类的定义、作用域及大小计算,限定访问符,this指针
C++ 4 类与对象(上) 面向对象的特点 类的定义 访问限定符 类的作用域 类的大小计算 this指针 this指针的特性 面向对象的特点 抽象 封装 继承 多态 类的定义 类的两种定义方式: 1. ...
- Java对象内存空间大小计算
一.查看基础类型的对象内存大小 八股文中很明确的告诉你了基础类型的大小 ,如下图: 类型 值大小(byte) 对象内存大小(byte) 备注 byte 1 16 char 2 16 int 4 16 ...
- C语言中如何计算结构体的字节大小
结构体内存对齐 在计算结构体所占字节的大小时,不要直观地累加结构体内成员的字节大小,实际结构体存放在内存中是有一定的规则的,这里涉及的规则就是内存对齐原则. 声明一个结构体stu struct stu ...
- 对于类对象模型的理解(类大小计算+大小端字节序)
类对象模型 如何理解类与对象 类: 通俗理解,类相当于一个模型框架,限定了类有哪些成员变量,但从底层来看,内存并没有分配实际的物理空间来存储类 对象: 类对象即为类的具体描述,当类对象进行实例化过程中 ...
- LPCM AAPCM G711 G726 AAC 音频采样、编码及帧大小计算
LPCM LPCM: linear pulse code modulation LPCM,即线性脉冲编码调制,是一种非压缩音频数字化技术,是一种未压缩的原音重现,在普通CD.DVD及其他各种要 ...
- 中心差分法 matlab,(最新整理)结构动力学使用中心差分法计算单自由度体系动力反应的MATLAB程序...
<(最新整理)结构动力学使用中心差分法计算单自由度体系动力反应的MATLAB程序>由会员分享,可在线阅读,更多相关<(最新整理)结构动力学使用中心差分法计算单自由度体系动力反应的MA ...
最新文章
- “树人杯”暨第三届辽宁科技大学校园程序设计竞赛正赛I 充分利用学习卡(粉)...
- spark计算TF-IDF值(中文)
- Mybatis注解实现一对多关联映射(@Many)
- JavaScript——定时器(setTimeout/setInterval)
- 框架中的Blob数据的定义
- webstore报 ESLint: Expected space or tab after '//' in comment.(spaced-comment)
- 【BZOJ-1324】Exca王者之剑 最小割
- 物理内存是如何组织管理的
- 蓝桥杯备赛第一天-138译码器
- 软件测试流程图及描述
- aes key iv从mysql_OpenSSL AES 算法中 Key 和 IV 是如何生成的?
- “学霸系统”之NABC
- 基于因子分析法分析新冠肺炎疫情对房地产业上市公司财务的影响
- java 线程的插队运行_java笔记–线程的插队行为
- 从bam中截取指定位置的 reads 或深度
- 信息化、数字化、数智化
- 服务器虚拟环境使用指南
- 快速调整 图片的 像素大小
- Python爬虫:BeautifulSoup的find()和findAll()
- C语言流控制命令的总结