下载此文档

结构体内存分配分析.doc


文档分类:高等教育 | 页数:约15页 举报非法文档有奖
1/15
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/15 下载此文档
文档列表 文档介绍
结构体内存分配分析.doc结构体成员的内存分布与对齐
马国峻
maguojun2005 @
我们先看一道IBM和微软的笔试题: 1 '
IBM笔试题:
struct {
short
al;
short
a2:
short
a3;
}A;
struct {
long
al;
short
a2;
}B;
sizeof( A)=6, sizeof(B)=&为什么?
注:sizeof(short)=2,sizeof(long)=4
微软笔试题:
struct example 1
{
short a ;
long b;
};-
struct example2
{
char c;
example 1 structl;
short e;
};
int main(int argc, char* argv[])
{ 〜 〜
example2 e2;
int d=(unsigned int)& 1-(unsigned int)&;
printf(M%d,%d,%d\n",sizeof(examplel),sizeof(example2),d);
return 0;
}
输出结果?
要能清除的分析上面的问题就要搞清楚结构体变量的成员在内存里是如何分布的、成员先后顺序 是怎样的、成员之间是连续的还是分散的、还是其他的什么形式?其实这些问题既和软件相关又和硬 件相关。所谓软件相关主要是指和具体的编程语言的编译器的特性相关,编译器为了优化CPU访问内 存的效率,在牛成结构体成员的起始地址时遵循着某种特定的规则,这就是所谓的结构体成员“对齐”; 所谓硬件相关主要是指CPU的“字节序”问题,也就是大于一个字节类型的数据如int类型、short类 型等,在内存中的存放顺序,即单个字节与高低地址的对应关系。字节序分为两类:Big-Endian和 Little-Endian,有的文章上称之为“大端”和“小端”,他们是这样定义的:
Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端;Big-Endian 就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
Intel、VAX和Unisys处理器的计算机中的数据的字节顺序是Little-Endian, IBM大型机和大多数 Unix平台的计算机中字节顺序是Big-Endian<,
关与Big-Endian和Little-Endian问题本文暂不做详细讨论,本文将以小端机(此处为intel x86架 构的计算机)、OS: WindowsXp和VC++“对齐”问题。
前面说了,为了优化CPU访问内存的效率,程序语言的编译器在做变量的存储分配时就进行了分配 优化处理,优化规则大致原则是这样:
对丁字节的元素(n=2,4,8,...),它的首地址能被n整除,这种原则称为“对齐”,如WORD(2字 节)的值应该能被2整除的位置,DWORD (4字节)应该在能被4整除的位置。
对于结构体来说,结构体的成员在内存中顺序存放,所占内存地址依次增高,第一个成员处于低
地址处,最后一个成员处于最高地址处,但结构体成员的内存分配不一定是连续的,编译器会对其成 员变量依据前面介绍的“对齐”原则进行处理。对待每个成员类似于对待单个n字节的元素一样,依 次为每个元素找一个适合的首地址,使得其符合上述的“对齐”原则。通常编译器中可以设置一个对 齐参数n,但这个n并不是结构体成员实际的对齐参数,VC++ N通常是这样计算得到的N=min(sizeof(该成员类型),n) (n为VC++)。
成员的内存分配规律是这样的:从结构体的首地址开始向后依次为每个成员寻找第一个满足条件 的首地址x,该条件是x % N = 0,并且整个结构的长度必须为各个成员所使用的对齐参数中最大的 那个值的最小整数倍,不够就补空字节。
结构体中所有成员的对齐参数N的最大值称为结构体的对齐参数。
VC++,可以修改这个设定的对齐参数,方法为在菜单“工程”的“设置” 中的 “C/C++” 选项卡的"分类”中 “Code Generation ” 的"Struct member alignment” 中设置, 1byte、2byte、4byte、8byte、16byte 等几种,默认为 8byte
也可以程序控制,采用指令:#pragma pack(xx)控制 如#pragma pack(l),l 字节对齐,#pragma pack(4), 4 字节对齐 #pragma pack(16),

结构体内存分配分析 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数15
  • 收藏数0 收藏
  • 顶次数0
  • 上传人蓝天
  • 文件大小170 KB
  • 时间2021-07-23