如何解决为什么内存空间显示的值与变量类型占用的值不同?
#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 举报,一经查实,本站将立刻删除。