首页 > 试题广场 >

struct temp{ short a...

[单选题]
struct temp{
    short a;
    char b;
    char c;
    long d;
    char e;
    int f;
};
在32位机器上sizeof的大小是()
  • 16
  • 24
  • 13
  • 15
解析:
|1Byte|1Byte|1Byte|1Byte|
|     short      | char | char |
|                long                |
| char | 填充|  填充|  填充|
|                 int                 |
共计4 * 4 = 16 Byte,选A
原因:
1. 在32位机中,
char     1字节
short    2字节
int        4字节
long     4字节
2. 数据在计算机中按“边界对齐”方式存储,支持按字寻址、按半字寻址、按字寻址,
半字地址必为2的整数倍,字地址必为4的整数倍,
所以半字长和一个字长的数据在存储时,就算前面有“空位”,为了保持地址的“一致性”,机器会对空位进行填充。
3. 比如:
|1Byte|1Byte|1Byte|1Byte|
| char | char | char | 填充 |
|      short     |     short      |
|      short     |     填充       |
|                  int                 |
|                 long               |
编辑于 2021-02-09 22:03:10 回复(2)
写在最前面的话:欢迎各位牛友一起交流,有误之处可指出。
本题考点:内存对齐,struct结构体对齐。
疑问:如何计算struct占用的内存大小?
规则:
  1. 32位机的编译器在默认情况下按照4字节对齐,即相当于#pragma pack(4)的效果;
  2. 对齐参数由成员类型的字节大小和pack参数(本题中pack参数为4)中较小者所决定;
  3. 结构体中第一个成员起始于0偏移处,另外每个成员的偏移地址必须能被对齐参数整除;
  4. 结构体成员的大小取其内部长度最大的数据成员作为其大小(适用于结构体嵌套的情形);
  5. 结构体总长度必须为所有对齐参数的整数倍。
分析:
  • 测试结果(带注释)

  • 内存模型

发表于 2021-02-09 22:45:58 回复(1)
C语言的数据类型在32 位的系统上
short 占据的内存大小是2 个byte;
int占据的内存大小是4 个byte;
long占据的内存大小是4 个byte;
float占据的内存大小是4 个byte;
double占据的内存大小是8 个byte;
char占据的内存大小是1 个byte。
发表于 2019-03-17 09:07:51 回复(0)
32位机器按4字节补齐,62位机器下按8字节补齐
1.总字节数是下一个类型字节的整数倍,如果不是则补齐

2.long long型按四字节补齐,8字节计算‘

3.最后结构体的大小是最宽字节的整数倍(32位最字节是4,64最宽字节是8)
所以最后答案就是2+1+1+4+1+(3,补齐到4,前面的字节和是9,是后面字节类型的整数倍,所以+3)+4
发表于 2019-03-30 15:25:54 回复(0)
32位机器按照4字节对齐,64位机器按照8字节对齐。
2+1+1 + 4+1(+3)+4=16
发表于 2018-12-12 10:51:56 回复(1)
C语言的数据类型在32 位的系统上
short 占据的内存大小是2 个byte;
int占据的内存大小是4 个byte;
long占据的内存大小是4/8 个byte;C标准规定,sizeof(long) >=sizeof(int)就可以。
float占据的内存大小是4 个byte;
double占据的内存大小是8 个byte;
char占据的内存大小是1 个byte。

技巧:结构体的总大小:最后一个成员的偏移量+大小,同时总大小满足最大对齐数的整数倍。

发表于 2023-04-28 18:09:43 回复(0)
发表于 2020-12-28 11:39:12 回复(0)
C语言的数据类型在32 位的系统上 short 占据的内存大小是2 个byte; int占据的内存大小是4 个byte; long占据的内存大小是4 个byte; float占据的内存大小是4 个byte; double占据的内存大小是8 个byte; char占据的内存大小是1 个byte。
发表于 2021-11-24 14:58:23 回复(0)

这个就很淦
发表于 2021-10-12 13:52:54 回复(0)
考虑到了字节对齐,却把long占几个字节记错了
发表于 2021-03-22 15:28:47 回复(0)
理解32位机器 对于占用字节的补齐
发表于 2020-11-11 20:18:54 回复(0)