首页 > 试题广场 >

32位系统下,对于下面的结构体A和B,sizeof(A),s

[单选题]
32位系统下,对于下面的结构体ABsizeof(A), sizeof(B)的结果分别是()
#include <stdio.h>
#pragma pack(2)
struct A {
 int a;
 char b;
 short c;
};
#pragma pack()
 
#pragma pack(4)
struct B {
 char b;
 int a;
 short c;
};
#pragma pack()
 
int main() {
    printf(“sizeof(A)=%d, sizeof(B)=%d\n”,sizeof(A),sizeof(B));
    return 0;
}

  • 8,8
  • 8,10
  • 8,12
  • 7,8
内存对齐原则:
第一个是 4,1,2 内存对齐为4+2+2=8;
第二个是1,4,2 内存对齐为 4+4+4=12
发表于 2018-06-15 14:15:55 回复(3)
Lnz头像 Lnz
内存对齐原则
1、  对于结构的各个成员,第一个成员位于偏移为0的位置,以后每个数据成员的偏移量必须是min(#pragma pack()指定的数,这个数据成员的自身长度) 的倍数。
2、  在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行。
发表于 2017-08-31 09:50:07 回复(0)
#pragma pack(n)表示默认以n字节对齐,若某变量(如int)的字节大于n,则以n的倍数对齐。
A:
----
----
B:
----
----
----
发表于 2017-09-05 18:44:28 回复(0)
是 4 2 2 与 4 4 4 的区别么
发表于 2017-11-02 21:06:21 回复(2)
A
a:****
b:*- 
c:**

B
b:*---
a:****
c:**--

发表于 2018-04-05 00:43:08 回复(0)
structB
{
 charb;
 inta;
 shortc;
};
如上面的这题 算内存大小:
先看数据类型最大的:int型 对齐规则 要是它的整数倍 即4的整数倍
在看 char b 1个字节  只剩3个字节 所以int a存不下  需在要4个字节 刚好存下int 
剩下的short c 还需要2个字节 但对齐规则是数据类型最大的整数倍 所以也是4个字节
加起来 4+4+4=12
所以 我们在定义的时候 最好按数据类型的大到小定义 这样 节约内存
发表于 2019-07-23 17:07:31 回复(0)
32位系统中。char占一个字节,short占两个字节,int 、float、long 都占 4 字节,double 占8 字节。
#pragma pack(n)表示默认以n字节对齐,若某变量(如int)的字节大于n,则以n的倍数对齐。


发表于 2018-09-16 11:52:42 回复(0)
满足三个准则:
1. 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;
2. 结构体每个成员相对于结构体首地址的偏移量都是当前成员大小的整数倍,如有需要编译器会在成员之间加上填充字节;
3. 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节。
发表于 2022-06-19 10:48:54 回复(0)
#pragma pack(n)表示默认以n字节对齐,若某变量(如int)的字节大于n,则以n的倍数对齐。
发表于 2020-10-04 17:01:52 回复(0)
#pragma pack (n)             作用:C编译器将按照n个字节对齐。
#pragma pack ()               作用:取消自定义字节对齐方式。
发表于 2018-01-18 19:38:49 回复(0)
应该选C 前者是2字节对齐 后者是4字节对齐
发表于 2017-08-15 00:03:56 回复(2)
2212 2x4🟰8
142 4x3🟰12
发表于 2023-01-10 10:35:50 回复(0)
内存对齐原则 #pragma pack (n)             作用:C编译器将按照n个字节对齐。 #pragma pack ()               作用:取消自定义字节对齐方式。 1、  对于结构体的各个成员,第一个成员位于偏移为0的位置,以后每个数据成员的偏移量必须是min(#pragma pack()指定的数,这个数据成员的自身长度) 的倍数。   2、  在数据成员完成各自对齐之后,结构体(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构体(或联合)最大数据成员长度中,比较小的那个进行。 32位系统中。char占一个字节,short占两个字节,int 、float、long 都占 4 字节,double 占8 字节。   #pragma pack(n)表示默认以n字节对齐,若某变量(如int)的字节大于n,则以n的倍数对齐。
发表于 2021-11-03 15:00:34 回复(0)
 pragma pack  这句代码是关键的。
发表于 2023-01-26 22:37:42 回复(0)
内存对齐原则: 按照#pragma 指定的字节大小n对齐,若某类型如int大于n,则以n的倍数对齐。

发表于 2021-05-22 17:30:03 回复(0)
此题考 pragma pack 的作用
发表于 2019-03-09 19:02:03 回复(0)