结构体所占内存大小

Posted 木鸟飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构体所占内存大小相关的知识,希望对你有一定的参考价值。

结构体所占内存大小划分原则:

1、划分字节,按照当前结构体中,字节数最大的类型作为划分单元。【这里面还有一些前提。下面的例子会详细说到】

2、以矩形块儿的形式划分。

#include <stdio.h>

/**划分示意图:

技术分享

最小单元是 double所以 这个 地方按照8个字节作为最小单元来划分。

*/

struct student1

{

double avgMark;

int ID;

};

/**划分示意图:

最小单元不能是数组这个地方的最小单元是 1个字节

技术分享

*/

 

struct student2{

char name[5];

char id[2];

};

/**划分示意图:

数组不作为划分单元,所以最小划分单位是int 4个字节。

技术分享

 

 

 

*/

 

 

 

struct student3{

 

int ID;

 

char name[10];

 

};

 

 

 

/**划分示意图:

 

30个格格就不画了。但是可以很明显的知道,划分单元是4个字节。这样name部分会浪费两个字节,所以它的占地面积是36个字节。

 

*/

 

 

 

struct BaseInfo{

 

char name[30];

 

int age;

 

};

 

/**划分示意图:

 

这个 划分就格外有说法了,划分单元到底取4还是取36.C语言作为一门经久不衰的语言,想想也不可能是36,要是BaseInfo里面写一个char name[100],那一个student4就会浪费100个字节。这太可怕了。这就是它把每一个结构体都要细分的原因,方便这个结构体融入到别的别的结构体中。

 

*/

 

 

 

struct student4{

 

int ID;

 

struct BaseInfo baseInfo;

 

};

 

 

 

/**划分示意图:

 

也不画了,char a会浪费3个字节,char c会浪费3个字节,一共占地面积是12个字节。

 

*/

 

 

 

struct test1{

 

char a;

 

int b;

 

char c;

 

};

 

/**划分示意图:

 

ac共享一行,然后浪费两个字节,

 

Int单独占一行,所以总共的占地面积是8个字节。

 

*/

 

 

 

struct test2{

 

char a;

 

char c;

 

int b;

 

 

 

};

 

int main(){

 

 

 

printf("sizeof(struct student1) = %d\n", sizeof(struct student1));//这个案例在开始看视频的时候,就想写了,毕竟double8个字节。16

 

printf("sizeof(struct student2) = %d\n", sizeof(struct student2));//7

 

printf("sizeof(struct student3) = %d\n", sizeof(struct student3));//16

 

printf("sizeof(struct student5) = %d\n", sizeof(struct student4));//40

 

printf("sizeof(struct test1) = %d\n", sizeof(struct test1));//12

 

printf("sizeof(struct test2) = %d\n", sizeof(struct test2));//8

 

getchar();

 

return 0;

 

}

 

 

 

后面这部分是想着想着觉得不对劲,补进来的:

 

struct test3{

 

double a;

 

};

 

struct test4{

 

struct test3 t3;

 

char a;

 

};

 

试试test4的占地面积吧~~~还蛮好玩的。

 

 

 

附运行结果:

 

技术分享

 

 

以上是关于结构体所占内存大小的主要内容,如果未能解决你的问题,请参考以下文章

如何计算Java对象所占内存的大小

结构体所占字节大小计算以及共用体大小计算

delphi 结构体和内存流

C语言中结构体变量所占内存大小的计算

C语言中是否变量类型占几个字节,它的地址就占几个字节

结构体,共用体,枚举所占内存大小