返回信息流struct name1{
char str;
short x;
int num;
}
struct name2{
char str;
int num;
short x;
}
为什么sizeof(struct name1)=8,sizeof(struct name2)=12;
不是说都是按照大数对齐么,name1和name2有什么区别呢?恳求达人解答
这是一条镜像帖。来源:北邮人论坛 / cpp / #6481同步于 2008/5/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
问一个结构体长度的问题
xiang8212
2008/5/9镜像同步13 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
struct name1{
char str; //str+x====>4
short x;
int num; //=====>4
}
struct name2{
char str; //str====>4
int num; //======>4
short x; //x======>4
}
谢谢,那为什么下面这个
2. #pragma pack(8)
3. struct example1
4. {
5. short a;
6. long b;
7. };
8. struct example2
9. {
10. char c;
11. example1 struct1;
12. short e;
13. };
example2的长度是16,而不是12呢
因为:“成员对齐有一个重要的条件,即每个成员按自己的方式对齐.其对齐的规则是,每个成员按其类型的对齐参数(通常是这个类型的大小)和指定对齐参数(这里默认是8字节)中较小的一个对齐.并且结构的长度必须为所用过的所有对齐参数的整数倍,不够就补空字节.”(引用)
struct1的长度是8,所以example2的长度是16
【 在 didiww 的大作中提到: 】
: 因为:“成员对齐有一个重要的条件,即每个成员按自己的方式对齐.其对齐的规则是,每个成员按其类型的对齐参数(通常是这个类型的大小)和指定对齐参数(这里默认是8字节)中较小的一个对齐.并且结构的长度必须为所用过的所有对齐参数的整数倍,不够就补空字节.”(引用)
: struct1的长度是8,所以example2的长度是16
多谢,得好好体会一下
那3楼的MM来解释一下这个
#include <iostream>
using namespace std;
struct example1
{
char c;
short a;
long b;
};
struct example2
{
char c;
example1 struct1;
};
int main()
{
cout << sizeof(example1) << endl;
cout << sizeof(example2) << endl;
return 0;
}
【 在 ATV 的大作中提到: 】
: 那3楼的MM来解释一下这个
: #include <iostream>
: using namespace std;
: ...................
8,8