微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么内存空间显示的值与变量类型占用的值不同?

如何解决为什么内存空间显示的值与变量类型占用的值不同?

  #include <stdlib.h> 
  #include <stdio.h>

    struct  Edge
 {
 // for every edge u,v,w
int u;
int v;
int w;
};

  struct Graph
 {
  // for graph vertex v edge e
int V;
int E;  
struct Edge *edge;
 };

  int main()
  {

     int i,j,k,w,s;
// open memory for graph g 
struct Graph *g = (struct Graph*)malloc(sizeof(struct Graph));
 //expected 20 but it show me 16
printf("%d",sizeof(struct Graph));

   return 0;

}

*int 要求 4 byte 两个 integer=8byte+struct Edge *edge(4+4+4=12),12+8=20 byte but sizeof(struct Graph) show me 16 为什么? *

解决方法

edge 的类型为“pointer to struct Edge”(struct Edge *) - 它存储 struct Edge 对象的地址。如果您得到 16 大小的 struct Graph,则意味着系统上的指针为 4 个字节宽。

大多数系统都有对齐要求,例如多字节对象从 2 或 4(甚至更大值)的倍数的地址开始。为了保持这些对齐限制,struct 类型可能在成员之间具有“填充”字节,因此 struct 的大小可能大于其成员大小的总和。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。