对齐问题,结果是什么?

liangyonglou 2009-09-28 03:49:18
struct pid_id
{
unsigned int inactive :1;
unsigned int :1;
unsigned int refcount :6;
unsigned int :0;
short pid_id1;
struct pid_id *link;
};

sizeof(pid_id)?
...全文
98 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
rendao0563 2009-09-28
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 xpdavis 的回复:]
你看看
struct a
{
  __int64 a3;
  char a1;
  short a2;
  int aa;
  int bb;
};
最大是__int64,8字节的,可是结果是8的倍数吗?
是要往后看的,因为前面占用的大小影响到后面域的地址
[/Quote]

你用的啥编译器? 上面发的几个都是8的倍数.
铖邑 2009-09-28
  • 打赏
  • 举报
回复
可能跟编译器有关吧
liangyonglou 2009-09-28
  • 打赏
  • 举报
回复
13 14 楼的大小一样

要是
struct a
{
char a1;
__int64 a3;
short a2;
int aa;
int bb;
};
就不一样了
铖邑 2009-09-28
  • 打赏
  • 举报
回复
struct a
{
char a1;
short a2;
int aa;
int bb;
__int64 a3;
};
放到后面,结果就不一样了
铖邑 2009-09-28
  • 打赏
  • 举报
回复
你看看
struct a
{
__int64 a3;
char a1;
short a2;
int aa;
int bb;
};
最大是__int64,8字节的,可是结果是8的倍数吗?
是要往后看的,因为前面占用的大小影响到后面域的地址
liangyonglou 2009-09-28
  • 打赏
  • 举报
回复
最大数据类型才是对的
我做了个试验

struct a
{
int aa;
int bb;
}

struct b
{
int ss;
int ff;
strcut a m;
}

求B 的sizeof 就是以4为对齐的
铖邑 2009-09-28
  • 打赏
  • 举报
回复
不是 看 最大内部数据类型
铖邑 2009-09-28
  • 打赏
  • 举报
回复
要看后面的域占用多少字节
如果是双字节的,为了避免地址是奇数,前面的域要填充到偶数字节

同理,如果是四字节,那么就要填充到四的倍数,等等……
rendao0563 2009-09-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 liangyonglou 的回复:]
在请问 按多少字节对齐 是根据什么确定的呢?
[/Quote]

最大内部数据类型
yyunffu 2009-09-28
  • 打赏
  • 举报
回复
应该如楼上说的.
liangyonglou 2009-09-28
  • 打赏
  • 举报
回复
在请问 按多少字节对齐 是根据什么确定的呢?
铖邑 2009-09-28
  • 打赏
  • 举报
回复
short 后面那个域占用四个字节,为了对齐,所以short占四个字节
wotur 2009-09-28
  • 打赏
  • 举报
回复
struct pid_id *link; -------4 bytes
每一段对其都是根据数据本身
struct pid_id *link; 本身占 4bytes, 所以该数据的起始地址 按4对其
也就是offset = 8 开始
wotur 2009-09-28
  • 打赏
  • 举报
回复
应该是12

struct pid_id
{
unsigned int inactive :1;
unsigned int :1;
unsigned int refcount :6; ---- 4 bytes
unsigned int :0;
short pid_id1; ------ 2 bytes
pading 2 bytes
struct pid_id *link; -------4 bytes
};

liangyonglou 2009-09-28
  • 打赏
  • 举报
回复
恩 是 12 说说吧,
我单独分别打印的话


unsigned int inactive :1;
unsigned int :1;
unsigned int refcount :6;
unsigned int :0;

是4
short pid_id1;
是2
struct pid_id *link;
是4

为什么一起确实12呢?
铖邑 2009-09-28
  • 打赏
  • 举报
回复
12?
liangyonglou 2009-09-28
  • 打赏
  • 举报
回复
没人帮忙解释吗? 自己顶一下!

69,371

社区成员

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

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