博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字节对齐总结
阅读量:7030 次
发布时间:2019-06-28

本文共 796 字,大约阅读时间需要 2 分钟。

1.字节对齐的缘由?

一句话说就是提高存取效率,存取效率与机器相关,比如有的机器总是从偶数字节开始取数据;同时,存取效率也和数据类型相关,比如如果取一个整型数字时,若能够一次取出来肯定是最好,但是若由于机器取数据总是从偶数字节开始这个原因花了两次访问,那么肯定会降低效率了。

2.字符对齐中的一些概念?

  • #pragma pack(n):表示显式声明机器的对齐字节为n,我们记这个数字为MA,每个机器都有默认的MA,刚才那句话的意思是改变MA,要恢复系统默认MA,语法是#pragma pack()
  • 有效对齐字节:以结构体为例进行分析,对于结构体中每个成员,它本身字节对齐要求至少得满足起始地址是本身大小的整数倍,但是如果MA小于它本身大小,那么要求对齐数为MA,在任何需要对齐的地方,有效对齐字节=min(MA,数据对齐字节)
  • 什么时候需要对齐?对于结构体,其每一个成员需要对齐,最后整个结构体的大小也需要对齐

3.对齐的原则(以结构体为例)

  • 对于结构体中每一个元素,对齐大小为min(MA,自身大小)
  • 结构体的首地址必须与min(MA,结构体中最大体积元素大小)对齐,注意不是min(MA,结构体大小)
  • 结构体最终大小需为min(MA,结构体中最大体积大小)对齐
  • C编译器缺省的结构成员自然对界条件为“N字节对齐”,N即该成员数据类型的长度。即如果不用#pragma pack(n) ,那么相当于n无穷大

另外二种种说法:

4.需要注意的是,sizeof函数取的是占用的栈空间,因此static 成员不会计算在内。

主要参考:1.  2.

PS:这个总结只是为自己总结的,所以我只图自己方便了,所以可能讲得不是很详尽,当然,如果大家看到了有些帮助那做好不过了,如果有些讲得不对的地方,请指出来。

转载于:https://www.cnblogs.com/obama/p/3308623.html

你可能感兴趣的文章
POJ NOI MATH-7653 地球人口承载力估计
查看>>
iOS UI高级之网络编程(HTTP协议)
查看>>
使用cocoaPods import导入时没有提示的解决办法
查看>>
iOS数据持久化存储之归档NSKeyedArchiver
查看>>
JavaScript面向对象
查看>>
Intellij修改模板代码
查看>>
2.页面布局示例笔记
查看>>
一些老游戏CPU 100%占用的解决方法
查看>>
f5基本介绍
查看>>
博前语
查看>>
Java SE核心之一:常用类,包装类,其他基本数据类型包装类。
查看>>
郑捷《机器学习算法原理与编程实践》学习笔记(第二章 中文文本分类(一))...
查看>>
python (ploit)
查看>>
Android 用achartengine 画折线图怎么显示不正确
查看>>
程序简单的测试与升级(暨实践第一次作业)
查看>>
信号处理
查看>>
【100题】第五十九题 用C++编写不能被继承的类
查看>>
轻描淡写
查看>>
mysql基本操作
查看>>
39.CSS3弹性伸缩布局【下】
查看>>