内存对齐的问题

Disa16 2009-11-21 04:04:17
大家帮忙看下,

struct a
{
char x;
int y;
double z;
char b;
}


sizeof(a) 的值是多少啊?
...全文
109 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
phpjspasp 2009-11-21
  • 打赏
  • 举报
回复
gcc 4.1.3
20
leewon1988 2009-11-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 benbshmily 的回复:]
win32
VS2005
24

1+3填充+4+8+1+7填充。因为是按照double 8字节对齐。
[/Quote]

你理解不对吧
对其的时候不是看当前类型的长度和#pragma pack(value)中value值的最大值,而是看其最小值
z0203153008 2009-11-21
  • 打赏
  • 举报
回复
我虚拟机里的GCC是1+4+(3)+ 8 + 1+(7),vc6应该是20
Julykey 2009-11-21
  • 打赏
  • 举报
回复
不好意思看错了,3是填充的
Julykey 2009-11-21
  • 打赏
  • 举报
回复
sizeof(int)不是4吗?为什么是3?
我在VS2005下也是24
benbshmily 2009-11-21
  • 打赏
  • 举报
回复
win32
VS2005
24

1+3填充+4+8+1+7填充。因为是按照double 8字节对齐。
la_feng 2009-11-21
  • 打赏
  • 举报
回复
struct a
{
char x; // 占用空间0
int y; //空间1,2,3空出,y占用4-7
double z; // 占用8-15
char b; //占用16,补满4字节对齐,17-19空出
}
0-19是20个空间,具体与编译器相关参考楼上的
cattycat 2009-11-21
  • 打赏
  • 举报
回复
一般是20.
leewon1988 2009-11-21
  • 打赏
  • 举报
回复
在#pragma pack(4)下,结果应该是:1+3+4+8+1+3=20
starwalker 2009-11-21
  • 打赏
  • 举报
回复
和编译器有关
leewon1988 2009-11-21
  • 打赏
  • 举报
回复
这个根据不同的编译器,结果是不一样的,还有要根据你的#pragma pack(value)种value的值来确定

65,210

社区成员

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

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