首页 > 试题广场 >

以下数据结构体在64位机器上占用的内存(sizeof(dat

[单选题]
以下数据结构体在64位机器上占用的内存(sizeof(data))是多少:

typedef struct _data
{
      int id;
      char name[6];
      long long time;
      char add[4];
}data

  • 16字节
  • 32字节
  • 64字节
  • 128字节
链接:https://www.nowcoder.com/questionTerminal/e364954b58db4929a9db8a6845380c74?toCommentId=124956
来源:牛客网
字节大小 32位系统 64位系统 char 1 1 short 2 2 int 4 4 指针 4 8 long 4 8 float 4 4 double 8 8 long long 8 8
链接:https://www.nowcoder.com/questionTerminal/e364954b58db4929a9db8a6845380c74?toCommentId=124956
来源:牛客网
**对齐规则** :

 1.  结构体的起始存储位置必须是能够被该结构体中最大的数据类型所整除。
1.  每个数据成员存储的起始位置是自身大小的整数倍(比如int在32位机为4字节,则int型成员要从4的整数倍地址开始存储)。
1.  结构体总大小(也就是sizeof的结果),必须是该结构体成员中最大的对齐模数的整数倍。若不满足,会根据需要自动填充空缺的字节。
1.  结构体包含另一个结构体成员,则被包含的结构体成员要从其原始结构体内部最大对齐模数的整数倍地址开始存储。(比如struct a里存有struct b,b里有char,int,double等元素,那b应该从8的整数倍开始存储。)
1.  结构体包含数组成员,比如char a[3],它的对齐方式和分别写3个char是一样的,也就是说它还是按一个字节对齐。如果写:typedef char Array[3],Array这种类型的对齐方式还是按一个字节对齐,而不是按它的长度3对齐。
1.  结构体包含共用体成员,则该共用体成员要从其原始共用体内部最大对齐模数的整数倍地址开始存储。
发表于 2020-07-25 22:43:38 回复(0)
字节大小 32位系统 64位系统
char 1 1
short 2 2
int 4 4
指针 4 8
long 4 8
float 4 4
double 8 8
long long 8 8
发表于 2021-10-12 23:24:06 回复(0)