关于求一个结构体所占的字节

tuning工作者 2011-04-19 09:27:09
struct w1{char ch[100];
int a;
int b}
和struct w2{char ch[100];
int a;
double b}
w1 w11;
w2 w22;
为什么是:
sizeof(w11)=108
sizeof(w22)= 112
如何计算的
...全文
104 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
alang512 2011-04-19
  • 打赏
  • 举报
回复

这是 结构体 内存字节对齐 的问题。
jernymy 2011-04-19
  • 打赏
  • 举报
回复
支持2楼和4楼的 。
zhuywei123 2011-04-19
  • 打赏
  • 举报
回复
200+4+4+4+4+4
最后一个不是1而是4,因为内存对齐规则要求结构体占用的总字节数为其中占用最大字节数类型的整数倍,本例中占用字节最大类型为int型,4字节,所以最后char类型补充3字节。
超gogo 2011-04-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 arnold9009 的回复:]

很显然,
struct w1{char ch[100]; ----占用100个字节
int a; ----占用4个字节
int b} ----占用4个字节

和struct w2{char ch[100]; ----占用100个……
[/Quote]
正解
xmu_才盛 2011-04-19
  • 打赏
  • 举报
回复
char 是1个字节, int是 4个字节 ,double是8个字节 所以是 第一个类1*100 +4*2 = 108 Byte
第二个类是 1*100 +4 +8 =112 Byte
firefoxbug 2011-04-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 li_heaven1 的回复:]

struct window{char text[200];
int a;
int b;
int c;
……
[/Quote]
这就是结构体内存对齐了,一般情况下CPU处理默认的都该是4个字节,sizeof(结构体)必须是要4的倍数,你看
text[200] 是200 int a; int b; int c; int d;现在就216,最后一个char d;虽然只是占了一个字节,但是CPU处理基本上都是按照4个字节来访问(一般情况下,#param pack 4),所以就默认最后一个字节系统自动补充三个字节。
tuning工作者 2011-04-19
  • 打赏
  • 举报
回复
struct window{char text[200];
int a;
int b;
int c;
int d;
char d;}
为什么它所占的字节为220
tlg233418 2011-04-19
  • 打赏
  • 举报
回复
没问题,楼上的解释很给力
Arnold9009 2011-04-19
  • 打赏
  • 举报
回复
很显然,
struct w1{char ch[100]; ----占用100个字节
int a; ----占用4个字节
int b} ----占用4个字节

和struct w2{char ch[100]; ----占用100个字节
int a; ----占用4个字节
double b} ----占用8个字节

这两个结构体的内存占用都很简单,不涉及边界对齐和填充问题;

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧