测试VC++结构成员对齐的问题
来源:互联网 发布:战争之王 知乎 编辑:程序博客网 时间:2024/06/08 01:19
//测试VC++ 结构成员对齐的问题 by zdleek
//一下结论通过VC2008编译测试得来
void TestStructMemberAlig()
{
#pragma pack(push, 8)
struct MyStructure
{
double i1;
char a1;
char a2;
char a3;
double i2;
char a4[2];
}s1;
#pragma pack(pop)
//上述结构成员对齐为8字节(Bytes),
//double i1占8字节, 那么成员变量a1,a2,a3之后且i2之前,VC++会增加5个字节补足对齐( 3 + 5 = 8 bytes )
//同样,成员变量a4之后会补6个字节用于对齐
//这样sizeof(s1)的大小实际上是sizeof(double) + sizeof(a1,a2,a3,a4) + 5 + 6 = 16 + 5 + 5 + 6 = 32;
int i = sizeof(s1);
s1.i1 = 1;
s1.a1 = 'a';
s1.a2 = 'a';
s1.a3 = 'a';
s1.i2 = 1;
s1.a4[0] = 'c';
s1.a4[1] = 'c';
int d = sizeof(double);
double dbl = s1.i2;
char buf[50] ={0};
memset(buf, -1, sizeof(buf));
memcpy(buf, &s1, sizeof(s1)); //注意在debug状态下查看buf的内容,可以验证结构成员补齐是如何补齐的
#pragma pack(push, 1)
struct MyStructure2
{
double i1;
char a1;
char a2;
char a3;
double i2;
char a4[2];
}s2;
#pragma pack(pop)
s2.i1 = 2;
s2.a1 = 'c';
s2.a2 = 'c';
s2.a3 = 'c';
s2.a4[0] = 'c';
s2.a4[1] = 'c';
s2.i2 = 2;
int i2 = sizeof(s2);
double dbl2 = s2.i2;
char buf2[50] ={0};
memset(buf2, -1, sizeof(buf2));
//注意在debug状态下查看buf的内容,可以验证结构成员补齐是如何补齐的
//(对齐是1个字节,则结构成员当中不会有额外的字节补齐)
memcpy(buf2, &s2, sizeof(s2));
}
- 测试VC++结构成员对齐的问题
- 结构体成员对齐的问题
- 结构体成员对齐的问题
- 结构体成员对齐的问题
- vc struct的成员对齐
- 结构对齐对结构成员的访问效率影响的测试。
- 结构体成员对齐等问题
- struct的成员对齐问题
- C语言结构的成员对齐
- 结构体、类的成员对齐
- 结构体成员的内存对齐
- 结构成员字节自然对齐的验证
- 结构体变量成员的字节对齐
- 结构体的数组成员变量对齐
- 结构体成员的对齐方式
- struct的成员对齐问题-结构体实际大小问题
- 关于VC,GCC成员变量的内存对齐和偏移量的问题
- 最透彻的讲解结构体成员内存对齐问题——透彻理解哦
- (二)论如何做一个好的主程序 ---游戏人生的感言
- IE8不能正常登录网上银行的解决方法
- 思想·引导概论·还说基础
- nginx 禁止ip访问及未绑定的域名跳转
- PPT分享:非参数统计方法简介
- 测试VC++结构成员对齐的问题
- 网络socket编程指南(C语言)
- 虚拟化技术的一个用例
- 给力的运维shell命令
- 关于动态代理和AOP的入门好文
- Device Formats【MSDN】
- 关于模板语言 Mustache
- 简单的delphi停泊窗口制作
- J2EE、Java SE、Java EE、Java ME详细介绍