首页 > 试题广场 >

在32系统下输出的结果为( ...

[单选题]
在32系统下输出的结果为(      )
#include <stdio.h>
#pragma pack(2)
struct Test1{
    int a;
    char b;
    short c;
    int *d;
} A;
#pragma pack()
#pragma pack(4)
struct Test2{
    int *d;
    char b;
    int a;
    short c;
} B;
#pragma pack()

int main(){
    printf("%d,%d\n",sizeof(A),sizeof(B));
    return 0;
}
  • 12,16
  • 13,13
  • 16,16
  • 其他几项都不对
#pragma pack(2)
2在其中代表对齐模数,相当于操作系统的位数(换算成字节数),用于指定结构体的对齐,每个成员的对齐模数是【该数据成员所占内存】与#pragma pack指定的数值】中的较小者。 

https://www.cnblogs.com/flyinggod/p/8343478.html

编辑于 2019-08-24 11:39:52 回复(0)
#pragma pack(n) n在其中代表对齐模数,相当于操作系统的位数(换算成字节数),用于指定结构体的对齐,每个成员的对齐模数是【该数据成员所占内存】与【(#pragma pack指定的数值】中的较小者。………………………………………………………………………………………… A和B的对齐字节分别是2和4,而且不足者需要补足,溢出时翻倍,所以A为4+2+2+4 = 12;B为4+4+4+4= 16。
编辑于 2020-03-01 10:59:25 回复(1)
#pragma pack(n)
以n字节方式对齐,
不足n字节的成员变量,需要补齐
-----A
发表于 2019-10-07 14:01:20 回复(0)
https://blog.csdn.net/mylinx/article/details/7007309
发表于 2020-01-18 17:17:39 回复(0)
A和B的对齐字节分别是2和4,而且不足者需要补足,溢出时翻倍,所以A为4+2+2+4 = 12;B为4+4+4+4= 16。
发表于 2019-12-10 09:16:42 回复(0)
以四字节对齐,如果出现八字节,就以八字节对齐
发表于 2022-03-12 01:03:21 回复(0)
我还在想pack2是什么意思,原来是规定了补齐的基本单位
发表于 2022-02-12 00:00:25 回复(0)
A 和B的对齐字节分别是2和4,而且不足需要不足,溢出时翻倍,4+2+2+4,B为4+4+4+4=16
发表于 2022-01-16 09:04:39 回复(0)
pragma pack(4)对齐4位
发表于 2020-02-26 21:42:27 回复(0)
补齐
发表于 2019-08-21 08:38:52 回复(0)