字节对齐
来源:互联网 发布:公司网络时断时续 编辑:程序博客网 时间:2024/06/10 09:30
有效对齐值 = min(结构自身对齐值, 指定对齐值)。
1. 结构自身对齐值:
(1)基本数据类型:char --1, short -- 2, int --4;
(2) 结构体或类:所有成员自身对齐值中的最大值;
2. 指定对齐值
#pragma pack(value) ,另linux下还可用__attribute__() 来指定。
原因:在让每个成员在一次内存访问中被读取或写入。对于32位CPU,一次可以处理32位,也就是4个字节,
实际访问内存,它从4的整数倍的内存地址,一个可以读出4个字节,如地址在0、1、2、3的双字可以一次次处理,而4、5、6、7则要到下一次。
如果不对齐的话,可能出现这样的情况,一个字或是双字恰好跨越了两次访问的内容,比如说它在1、2、3、4,那么要取它的话,必然要访问两次内存。
这样会造成效率的下降。
编译器为结构分配的地址要对齐在“有效对齐值”的边界上,即若有效对齐值为N,地址为addr,则
addr % N == 0。
另外,结构体或类的大小有“圆整”要求,即sizof(struct X) % 有效对齐值 == 0。原因:考虑结构体数组,让连续
排列的另外的结构体也满足对齐要求。
在32位CPU上,gcc 和windows 默认是4字节对齐。
0 0
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- org.hibernate.LazyInitializationException: could not initialize proxy - no Session
- linux打印函数调用堆栈
- 关于JPA(Hibernate)+spring在未使用web的情况下使用懒加载,导致no sesssion or session has closed!
- beanstalkd
- Debug Assertion Failed!问题怎么解决
- 字节对齐
- GDI+我们可以很方便的对bmp、jpeg、gif、tiff、png格式的图片进行转换
- 无处不在的微创新——验证码的故事
- 插入相同“键值”key时Linux 内核中红黑树的使用
- Spring依赖注入 — 构造器注入
- Coder-Strike 2014 - Round 1
- SP2010开发和VS2010专家"食谱"--第一章节--列表和事件Receiver(9)--调试Feature Receiver
- 通过HTTP协议实现多线程下载
- scrum