c语言中为啥有时候int占用内存字节数为2?

如:

struct dog

 { char ch[10];

   int i;

   int *p;

   double k;

 } dog1;

 

为啥dog1占用内存的字节数为22?int啥时候等于占用2?

32位系统中:

char ch[10];  //正常情况下占10个字节

int i; //正常情况下占4个字节

int *p; //正常情况下占4个字节

double k;//占8个字节

但是在结构体中,存在字节对齐问题,double类型占用8个字节,int和int*一起也占用8个字节,所以内存总量应该是8的倍数,char数组补齐,大小是10以上且是8的倍数,最小的数是16。所以总共占32个字节

 

字节对齐问题

为了字节对齐,ch[10]占用10个字节,它后面的6个字节占用但不使用,int i和*p都是4个字节,double是8个字节。你说错了,应该是32吧

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632