6.pragma pack
2024-08-26 18:46:28
下面两个结构体
struct One {
double d;
char c;
int i;
} struct Two {
char c;
double d;
int i;
}
在#pragma pack(4)和#pragma pack(8)的情况下,结构体的大小分别是: 16 16 16 24.
分析:
许多实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首地址的值是某个数k(通常它为4或8)的倍数,这就是所谓的内存对齐。
每个特定平台上的编译器都有自己的默认“对齐系数”(32位机一般为4,64位机一般为8)。我们可以通过预编译命令#pragma pack(k),k=1,2,4,8,16来改变这个系数,其中k就是需要指定的“对齐系数”;也可以使用#pragma pack()取消自定义字节对齐方式。
struct 或者 union 成员对齐规则如下:
1. 第一个数据成员放在offset为0的地方,对齐按照对齐系数和自身占用字节数中,二者比较小的那个进行对齐;
2. 在数据成员完成各自对齐以后,struct或者union本身也要进行对齐,对齐将按照对齐系数和struct或者union中最大数据成员长度中比较小的那个进行;
先局部成员对齐,然后再全局对齐。
最新文章
- unity游戏在logcat中过滤一些不需要的Log
- 【BZOJ-4521】手机号码 数位DP
- JavaScript 运行时错误: 无法获取未定义或 null 一种解决方案
- 30天,O2O速成攻略【7.18广州站】
- iOS - MVVM 架构模式
- FZU 1914 Funny Positive Sequence
- 解决position:relative情况下,z-index无效的方法
- 自己在安装centos 系统时, 是使用英文安装 成功,现在系统语言为英语,如何设置为中文?
- 自定义按钮~自适应布局~常见bug
- ubuntu 上下载PHP的源代码
- Java虚拟机-类文件
- 持续集成-jenkins介绍与环境搭建
- asp.net core 今日所得
- Kafka技术内幕 读书笔记之(二) 生产者——服务端网络连接
- 判断字符串是否为正整数 &; 浮点小数
- Authorization With Pundit
- javascript高级选择器querySelector和querySelectorAll
- JustOj 1974: 简单的事情 (组合数)
- LeetCode题解之Pascal's Triangle II
- [转]HTTP请求中的form data和request payload的区别