找回密码
 注册
查看: 999|回复: 4

问一个time_t的诡异问题

[复制链接]
发表于 2006-5-11 20:53:27 | 显示全部楼层 |阅读模式
OS是WINXP,是在Cygwin下面用gcc编译一段程序,程序里面有一个结构题:

struct section{
   char  s_ROID[15];
   char  s_ROType;
   char  s_ContentType;
   time_t s_EndTime;   
   char  s_Status;   
};

我的是32位的机器,sizeof(time_t)结果是4,然后我用sizeof(struct section)打印这个结构体的大小,与我预想的大小22不同,结果居然是28...然后最诡异的是它居然还会随着我把 time_t s_EndTime这行的位置变化4个byte。

就是下面这个结构体的大小是24
struct section{
   char  s_ROID[15];
   char  s_ROType;
   char  s_ContentType;  
   char  s_Status;   
   time_t s_EndTime;   
};


这个是不是gcc有的一些对齐的优化或者什么问题在里面?请高手指点一下
发表于 2006-5-11 22:31:17 | 显示全部楼层
4个字节的time_t 类型的地址要能被4整除.
将一个结构体成员存储到存储器的时候,需要从偶数地址或者4的倍数地址开始存储,定位处理和CPU的体系结构有关.
回复

使用道具 举报

发表于 2006-5-11 22:34:22 | 显示全部楼层
第一个结构体中s_ContentType后面要加入3个空格.s_Status后面也有3个空格,所以就是28了,
每二个结构体中s_Status后要加入2个空格.

你可以在这些空格的地方相应地加上几个char类型,看看结构体大小会变化不?
我在linux上试了一下,不会变化.
回复

使用道具 举报

 楼主| 发表于 2006-5-12 01:44:41 | 显示全部楼层
赞的!
受教了!!

回复

使用道具 举报

发表于 2006-5-13 00:23:44 | 显示全部楼层
试试 gcc -fnative-struct [...]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2025-2-7 01:06 , Processed in 0.048961 second(s), 16 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表