首页 > 试题广场 >

下面的结构体大小分别是多大(假设32位机器)?

[问答题]
下面的结构体大小分别是多大(假设32位机器)?
struct A {
char a;
char b;
char c;
};

struct B {
int a;
char b;
short c;
};

struct C {
char b;
int a;
short c;
};

#pragma pack(2)
struct D {
char b;
int a;
short c;
};

编译器中提供了#pragma pack(n)来设定变量以n字节对齐 方式。n字节对齐就是说变量存放的起始地址的偏移量 有两种情况:第一、如果n大于等于该变量所占用的字节数,那么偏移量必须满足默认的对齐方式,第二、如果n小于该变量的类型所占用的字节数,那么偏移量为n的倍数,不用满足默认的对齐方式。结构的总大小也有个约束条件,分下面两种情况:如果n大于所有成员变量 类型所占用的字节数,那么结构的总大小必须为占用空间最大的变量占用的空间数的倍数;否则必须为n的倍数。
发表于 2015-09-05 10:36:07 回复(0)
结构体的大小问题在求解的时候要注意对齐:

A:对齐值为:1 。大小为:3
B:对齐值为:4 。 大小为:4+4 = 8(第一个4为int,第二个4为char 和 short ,要空余1个)
C:对齐值为:4。大小为:4+4+4 = 12(第一个为char ,空余3个,第二个为int ,第三个为char 空余3个)
D:指定对齐值为:2(使用了#pragma pack(2) 。大小为2+4+2 = 8。(第一个char,空余1个,第二个为int ,4个,第3个位char,空余1个)。
编辑于 2015-09-09 14:45:21 回复(8)
3、8、12、8
A:对齐值为:1
B:对齐值为:4
C:对齐值为:4
D:指定对齐值为:2
发表于 2015-05-19 19:13:40 回复(0)

对齐值是什么

发表于 2019-10-18 15:53:22 回复(0)
3  8   12   8
发表于 2015-10-21 16:32:14 回复(0)
http://www.cnblogs.com/fengkang1008/p/4741856.html
发表于 2015-08-21 11:31:28 回复(0)
3,8,12,8
发表于 2015-08-06 14:40:11 回复(0)
3,8,12,8
发表于 2015-07-26 10:23:53 回复(0)
3,8,12,8
发表于 2015-07-20 15:13:19 回复(0)
3,8,12,8
发表于 2015-07-13 21:05:25 回复(0)
答案:3; 8; 12; 8
发表于 2015-06-18 10:58:39 回复(0)
3,8,12,8
D指定2字节对齐。
发表于 2015-06-12 08:35:53 回复(0)
3,8,12,8
发表于 2015-06-11 16:10:27 回复(0)
3,8,12,8
发表于 2015-06-02 09:02:55 回复(0)
3 8 12 8
发表于 2015-06-01 07:36:27 回复(0)
3 8 12 8
发表于 2015-05-26 08:43:24 回复(0)
3 8 12 8
发表于 2015-05-21 23:06:04 回复(0)
3,8,12,8
发表于 2015-05-05 14:21:02 回复(0)