首页 > 试题广场 >

在32位系统中,下面结构体中,sizeof(A)=[$##$

[填空题]
在32位系统中,下面结构体中,sizeof(A) = 1, sizeof(B) = 2,sizeof(C) = 3(单位字节,只用填数字)
struct A
{
    int a;
    char b;
    short c;
};

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

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

8,12,8;A:int为最高字节,第一行为int,占四个字节,第二行为char,占一个字节,由于不满4字节对齐,加上short后仍差1字节对齐,所以添加一个空字节,共8字节;C:规定了为2字节,short和int都超过或等于4字节,char差一字节,用空字节对齐,所以4+2+2=8字节
编辑于 2024-04-20 14:17:10 回复(0)
答案 (1)  8 ;(2)  12 ;(3)  8  解析 - 对于  struct A :在32位系统中, int  占4字节, char  占1字节 , short  占2字节。结构体成员按声明顺序存储,为满足内存对齐原则(成员的地址是其自身大小的整数倍), char  类型的  b  后需填充3字节,使得  short  类型的  c  能从2的整数倍地址开始存储。所以  sizeof(A)=4 + 1 + 3+ 2 = 8  字节。 - 对于  struct B : char  占1字节, int  占4字节, short  占2字节。由于  char  类型的  b  后要填充3字节使  int  类型的  a  从4的整数倍地址开始存储, short  类型的  c  后要填充2字节使结构体总大小为最大成员(这里是  int ,4字节)大小的整数倍。所以  sizeof(B)=1 + 3+ 4 + 2 + 2 = 12  字节。 - 对于  struct C : #pragma pack(2)  指令指定了2字节对齐。 char  占1字节, int  占4字节, short  占2字节。 char  类型的  b  后填充1字节使  int  类型的  a  从2的整数倍地址开始存储, short  类型的  c  无需额外填充,此时结构体总大小为8字节,满足2字节对齐要求。所以  sizeof(C)=1 + 1+ 4 + 2 = 8  字节。
发表于 2025-05-19 01:15:46 回复(0)