新手求助下面这个结构体的sizeof

HonryZZ 2011-03-26 04:39:54

typedef struct MYTIME
{
unsigned short nYear;
unsigned char nMonth;
unsigned char nDay;
unsigned char nHour;
unsigned char nMin;
unsigned char nSec;
unsigned char DayIndex;
} MYTIME;


struct UserTime
{
MYTIME A;
MYTIME B;
unsigned char total;
};


sizeof(struct UserTime) = ?
为啥呢...
...全文
169 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
linux_ljm 2011-03-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 coding_hello 的回复:]

影响结构体大小的,基本上就是三个原则:

1 结构体每个成员相对于结构体首地址的偏移量是成员自身大小的整数倍

2 结构体的总大小为结构体最宽基本类型成员大小的整数倍

3 编译器的对齐指示会有影响

如果不能满足时,则添加无用的字节进来保证满足这3个原则。

4楼说明了前2项,6楼的说明了第3项
[/Quote]

学习了
CFan_chen 2011-03-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hiroyukki 的回复:]

结构体对齐以结构体里最大的一个元素的对齐方式对齐。

struct MYTIME里最大的是2(short)就以2对齐,char和short间没有间隙了。
刚好一个struct MYTIME8字节,两个就是16字节,
struct UserTime里最大的是 struct MYTIME,这个是2字节对齐,那么struct UserTime也应该是2字节对齐。
最后一个char后面为了对齐……
[/Quote]
给力啊~~
野男孩 2011-03-26
  • 打赏
  • 举报
回复
影响结构体大小的,基本上就是三个原则:

1 结构体每个成员相对于结构体首地址的偏移量是成员自身大小的整数倍

2 结构体的总大小为结构体最宽基本类型成员大小的整数倍

3 编译器的对齐指示会有影响

如果不能满足时,则添加无用的字节进来保证满足这3个原则。

4楼说明了前2项,6楼的说明了第3项
CppCoder 2011-03-26
  • 打赏
  • 举报
回复
typedef struct MYTIME这行前加一句
#pragma pack(push, 1)

sizeof 是 17
贪食蛇男 2011-03-26
  • 打赏
  • 举报
回复
不是以4对齐,是一个 TYPE型的家伙,要出现在 sizeof(TYPE)的整数倍的位置。
int32就是4对齐,short是2
贪食蛇男 2011-03-26
  • 打赏
  • 举报
回复
结构体对齐以结构体里最大的一个元素的对齐方式对齐。

struct MYTIME里最大的是2(short)就以2对齐,char和short间没有间隙了。
刚好一个struct MYTIME8字节,两个就是16字节,
struct UserTime里最大的是 struct MYTIME,这个是2字节对齐,那么struct UserTime也应该是2字节对齐。
最后一个char后面为了对齐留个字节,18个没错啊?
HonryZZ 2011-03-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 faisha 的回复:]

20吧,内存以4对齐
[/Quote]

我开始也觉得是20吧..结果在VC上sizeof了一把,无论怎么设置..都是18.....为啥呢...
faisha 2011-03-26
  • 打赏
  • 举报
回复
20吧,内存以4对齐
贪食蛇男 2011-03-26
  • 打赏
  • 举报
回复
搜下内存对齐原则。

70,023

社区成员

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

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