首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个关于内存对其的个人理解,如有不对,还请各位指正解决办法

2012-03-28 
一个关于内存对其的个人理解,如有不对,还请各位指正struct{doublecchara1chara2chara3chara4chara5i

一个关于内存对其的个人理解,如有不对,还请各位指正
struct
{
double   c;
char   a1;
char   a2;
char   a3;
char   a4;
char   a5;
int   b;
char   c1;
char   c2;
char   c3;
char   c4;
char   c5;
}test;

0-7:double型c
8:char型a1(8是sizeof(char)的整数倍)
9:char型a2(9是sizeof(char)的整数倍)
10:char型a3(10是sizeof(char)的整数倍)
11:char型a4(11是sizeof(char)的整数倍)
12:char型a5(12是sizeof(char)的整数倍)
13不是sizeof(int)整数倍,所以13-15填充位
16-19:int型b
20:char型c1(20是sizeof(char)的整数倍)
21:char型c2(21是sizeof(char)的整数倍)
22:char型c3(22是sizeof(char)的整数倍)
23:char型c4(23是sizeof(char)的整数倍)
24:char型c5(24是sizeof(char)的整数倍)
struct中最强的对齐为double:8位
而25并非8的倍数,所以,25-31都为填充位,
故,最后sizeof(test)   =   32

[解决办法]
VC6是如此
[解决办法]
楼上理解没错
补充一点
vc6中的编译选项有 /Zp[1|2|4|8|16] ,/Zp1表示以1字节边界对齐,相应的,/Zpn表示以n字节边界对齐。n字节边界对齐的意思是说,一个成员的地址必须安排在成员的尺寸的整数倍地址上或者是n的整数倍地址上,取它们中的最小值。也就是:
min ( sizeof ( member ), n)
例如:
#pragma pack(1)
struct Test
{
double c;
char a1;
char a2;
char a3;
char a4;
char a5;
int b;
char c1;
char c2;
char c3;
char c4;
char c5;
};
#pragma pack(1)
为sizeof(test)为22,在vs2005下测试正确
[解决办法]
内存对齐总的来说是为了查找的效率,所以它的对齐方式是按内部数据占内存最大的元素来对齐的,根据这个特点再分析

热点排行