结构体内存大小的求法

结构储存分配是一个很重要,很基础的东西,面试的时候大多数面试官都会问到的问题,所以在此还是有必要去讲一下!

首先我们必须知道是三个概念:

1.结构体内存对齐。

2.为什么要有结构体内存对齐?

答:(1)使用空间来换取时间的设计;(2)和平台有关

3.怎么求结构体的内存大小;

其次以下概念我们必须牢记:

1.默认对齐数:vs/vc------8;

                        linuc-------4;

2.结构体第一个数永远放在0偏移处;

3.偏移值:

4.对齐数:自身大小和默认对齐数的较小值;

5.每个成员必须对应到自身对齐数的整数倍;

6.结构体大小必须是最大对齐数的整数倍;

举个例子:

1.求类型A的内存大小:

typedef struct A

{

int i;

char a;

double  d;

}A;

答案:16

分析:

结构体内存大小的求法_第1张图片

2.求类型A的内存大小:

typedef struct A

{

int i;

char a[5];

}A;

答案:8;

分析:将char  a[5]看做五个char元素,根据上面的规则求取大小;

3.求类型A的内存大小:

typedef  struct B

{

char c;

double d;

}B;

typedef  struct  A

{

int  i;

char a[5];

B b;

}A;

答案:32

分析:

结构体内存大小的求法_第2张图片



ok!!! 继续加油!!!



你可能感兴趣的:(结构体,讲解,内存大小)