- 4
- 0
- 约4.02千字
- 约 7页
- 2021-03-07 发布于天津
- 举报
文档从互联网中收集,已重新修正排版,
文档从互联网中收集,已重新修正排版,word格式支持编辑,如有帮助欢迎下载支持。
PAGE
PAGE #如有帮助欢迎下载支持
内存中结构体的内存对齐
一、 字节对齐作用和原因:
对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特泄 类型的数据只能从某些特左地址开始存取。比如有些架构的CPU在访问一个没有进行对齐的 变量的时候会发生错误,那么在这种架构下编程必须保证字节对齐,其他平台可能没有这种 情况,但是最常见的是如果不按照适合其平台要求对数据存放进行对齐,会在存取效率上带 来损失。比如有些平台每次读都是从偶地址开始,如果一个int型(假设为32位系统)如 果存放在偶地址开始的地方,那么一个读周期就可以读出这32bit,而如果存放在奇地址开 始的地方,就需要2个读周期,并对两次读出的结果的高低字节进行拼凑才能得到该32bit 数据,显然在读取效率上下降很多。
二、 字节对齐规则:
四个重要的概念:
数据类型自身的对齐值:对于char型的数据,其自身对齐值为1,对于short型为
对于int, float, double类型,其自身对齐值为4个字节。
结构体或者类的自身对齐值:其成员中自身对齐值最大的那个值。
指定对齐值:^pragma pack (value)时指泄的对齐value。
数据成员、结构体和类的有效对齐值:自身对齐值和指左对齐值中小的那个值。 补充:
.每个成员分别按自己的方式对齐,并能最小化长度。
.复杂类型(如结构)的默认对齐方式是它最长的成员的对齐方式,这样在成员是复杂类 型时,可以最小化长度。
.对齐后的长度必须是成员中最大的对齐参数的整数倍,这样在处理数组时可以保证每 一项都边界对齐。
^pragma pack(l)
struct test
{
static int a; //static var
double m4;
char ml;
int m3;
} #pragma pack 0
//sizeof(test)=13;
Class testl { };
//sizeof(testl)=l;
/*注明:
1、 结构或者类中的静态成员不对结构或者类的大小产生影响,因为静态变量的存储位置与 结构或者类的实例地址无关;
2、 没有成员变量的结构或类的大小为1,因为必须保证结构或类的每一个实例在内存中都
有唯一的地址。*/
^pragma pack(l)
struct test
{
static int a; //static var
double m4;
char ml;
int m3;
}
#pragma packO
//sizeof(test)=13;
Class testl{ };
//sizeof(test 1)=1;
/*注明:
1、 结构或者类中的静态成员不对结构或者类的大小产生影响,因为静态变量的存储位置与 结构或者类的实例地址无关;
2、 没有成员变疑的结构或类的大小为1,因为必须保证结构或类的每一个实例在内存中都 有唯一的地址。*/
示例://分析下而的例子C:
/#指定按2字节对齐*
/#指定按2字节对齐*/
struct C
文档从互联网中收集,已重新修正排版,
文档从互联网中收集,已重新修正排版,word格式支持编辑,如有帮助欢迎下载支持。
}; PAGE
};
PAGE #如有帮助欢迎下载支持
文档从互联网中收集,已重新修正排版,
文档从互联网中收集,已重新修正排版,word格式支持编辑,如有帮助欢迎下载支持。
}; PAGE
};
PAGE #如有帮助欢迎下载支持
char b;
int a;
short c;
};
^pragma pack () //恢复对齐状态
/* 第一个变量b的自身对齐值为1,指定对齐值为2,所以,其有效对齐值为1,假设C从0x0000 开始,那么b存放在0x0000,符合0x0000*1 = 0:
第二个变量,自身对齐值为4,指定对齐值为2,所以有效对齐值为2,所以顺序存放在0x0002、 0x0003、0x0004、0x0005四个连续的字节空间中,符合0x000202二(h
第三个变量C的自身对齐值为2,所以有效对齐值为2,顺序在0x0006. 0x0007中,符合
0x0006%2=0.
所以从0x0000到0x0007共八字节存放的是struct C的变虽 又struct C的自身对齐值为
4,所以struct C的有效对齐值为2。
又 8%2=0, struct C 只占用 0x0000 到 0x0007 的八个字节。所以 sizeof (struct 0=8。 如果把上而的^pragma pack(2)改为#pragma pack(4),那么我们可以得
您可能关注的文档
最近下载
- 《幼儿园班级管理》学前教育专业全套教学课件.pptx
- 最新一年级下册语文期末考试试卷.doc VIP
- (2025春新版本)教科版一年级下册科学全册教案.docx
- 广东省惠州一中教育集团2024-2025学年上学期期末质量监测 七年级数学科试卷(含答案).pdf VIP
- 安防系统培训内容(doc65).pdf VIP
- 贵州省房屋安全性鉴定技术管理标准培训.pptx
- GB4094-汽车操纵件、指示器及信号装置的标志.pdf VIP
- 规划课题申报范例:“双减”背景下历史课堂教学提质增效的实践研究(附可修改技术路线图).docx VIP
- 机械制图与CAD(AR版)PPT全套完整教学课件.pptx
- 2025年云南省初中学业水平考试中考道德与法治真题试卷(真题+答案).pdf VIP
原创力文档

文档评论(0)