64位系统下,class的默认对齐是按照8字节长么?我发现是4字节啊

idsa347 2012-05-24 09:09:26
我用VC2010的64位版在win2k8R2 上面编译一个小程序,工程属性都接受默认值。

class MyClass{
public:
int i;
int ii;
int iii;//why not 16?
};
int main(void)
{
printf("%d,%d\n",sizeof(size_t),sizeof(MyClass));
return 0;
}

发现打印8,12.类型MyClass并不是按照8字节对齐的。

这是为什么?
...全文
453 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
一个傻冒 2012-06-14
  • 打赏
  • 举报
回复
工程默认属性是按1字节对齐吧。
你改一个8字节。应该是16.
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用 3 楼 的回复:

32位下 也是默认8字节对齐的。
得有double int64才能体现出8字节对齐。


我的问题是,一个struct 的大小如果不是8的倍数,那么在64位下,编译器会不会把不足"8的倍数"的部分补齐(填0),以使得数据结构的地址能以8的倍数对齐?

谢谢。
[/Quote]
不能,你的代码不是证实了么
idsa347 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

32位下 也是默认8字节对齐的。
得有double int64才能体现出8字节对齐。
[/Quote]

我的问题是,一个struct 的大小如果不是8的倍数,那么在64位下,编译器会不会把不足"8的倍数"的部分补齐(填0),以使得数据结构的地址能以8的倍数对齐?

谢谢。
  • 打赏
  • 举报
回复
32位下 也是默认8字节对齐的。
得有double int64才能体现出8字节对齐。
waitlife 2012-05-24
  • 打赏
  • 举报
回复
int不是4个字节吗?3个int不是12个字节?
ouyh12345 2012-05-24
  • 打赏
  • 举报
回复
输出一下
sizeof(int)

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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