关于结构体字节对齐的一个问题

zhqyzhqychn 2009-05-15 11:12:03
在网上看到一句话:
结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding);
由于结构体的成员可以是复合类型,比如另外一个结构体
确定复合类型成员的偏移位置时则是将复合类型作为整体看待

struct s1
{
char c;
int i;
};
struct s2
{
char c1;
s1 s;
char c2;
};

sizeof(s2)为16;
如果按照上面的说法,s2中的s1的偏移量应该是8才对(s1大小为8),那结构体s2大小 应该是24才对啊,是不是那句话错了。
...全文
93 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
http://blog.csdn.net/hairetz/archive/2009/04/16/4084088.aspx
看我这篇5分钟搞定内存字节对齐

你这里参考原则2,看完还不懂再问吧
cyldf 2009-05-16
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20090302/18/4320513c-c749-42bd-8922-b96c00b5a2b4.html
这个或许对楼主有帮助
中才德创 2009-05-16
  • 打赏
  • 举报
回复
24,你是如何算到的?
不能标注出来吗?
GaA_Ra 2009-05-15
  • 打赏
  • 举报
回复
struct s2
{
char c1; //4
s1 s; //8=2*4
char c2; //4
};
如上面很多位说的,以4字节对齐
chenxu_ustc 2009-05-15
  • 打赏
  • 举报
回复
s1 占8个字节 ,但是他是4字节对齐的 , s2也是4字节对齐 ,占用16字节
lingyin55 2009-05-15
  • 打赏
  • 举报
回复
这个比较详细,楼主自己参考下
http://www.programfan.com/club/showtxt.asp?id=298981
crst_zh 2009-05-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 crst_zh 的回复:]
struct s1
{
char c; //1
int i; //4
};
//8

struct s2
{
char c1;
s1 s;
char c2;
};


S2中还是以4对齐的。
[/Quote]

x---x---yyyyz---
c c1 i c2
lingyin55 2009-05-15
  • 打赏
  • 举报
回复
s2也是以4字节对齐的。
crst_zh 2009-05-15
  • 打赏
  • 举报
回复
struct s1
{
char c; //1
int i; //4
};
//8

struct s2
{
char c1;
s1 s;
char c2;
};


S2中还是以4对齐的。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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