QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1080|回复: 11

关于Linx下字节序的问题

[复制链接]
发表于 2004-3-2 17:09:11 | 显示全部楼层 |阅读模式
比如:
typedef struct  S_struct_T
{
      char ch;
}S_struct;
S_struct   mstruct;

发现,sizeof(mstruct)=1;这是正常的。
但是
typedef struct  S_struct_T
{
      char ch;
      char ch2;
      int      int1;
      int      int2;
}S_struct;
S_struct   mstruct;

发现,sizeof(mstruct)=16;但是实际上应该是10。

请问这是什么原因,怎么才能恢复成10。
谢谢!!
发表于 2004-3-2 17:26:35 | 显示全部楼层
字节对齐的问题,编译器把原本是单字节的char"升级"到双字节的int了.这样有助于提高程序执行时的性能,不过有可能会带来一些小问题...
回复

使用道具 举报

发表于 2005-1-11 21:15:34 | 显示全部楼层
双字节的int?
回复

使用道具 举报

发表于 2005-1-12 19:41:38 | 显示全部楼层
可能bigcat写错了吧~~~应该是4字节的
回复

使用道具 举报

发表于 2005-1-12 20:44:40 | 显示全部楼层
编译器为了把第二个char都凑成偶地址,所以在第一个char后面会空出一个字节,同理为了把第一个int放在偶地址上,第二个char后面还要空出一个字节
char ch;
char unuse
char ch2;
char unuse
int int1;
int int2;
所以就是16个字节
回复

使用道具 举报

发表于 2005-1-15 21:56:31 | 显示全部楼层
[quote:0dcfeb7e63="mozilla"]编译器为了把第二个char都凑成偶地址,所以在第一个char后面会空出一个字节,同理为了把第一个int放在偶地址上,第二个char后面还要空出一个字节
char ch;
char unuse
char ch2;
char unuse
int int1;
int int2;
所以就是16个字节[/quote]

这是16字节???        
你自己数数,呵呵
应该是
char ch;
//3 char unuseful here
char c2;
//3 char unuseful here
int int1;
int int2;
回复

使用道具 举报

发表于 2005-1-15 22:10:01 | 显示全部楼层

Re: 关于Linx下字节序的问题

[quote:f713b1eecb="lshni"]怎么才能恢复成10。
谢谢!![/quote]

typedef struct  S_struct_T
{
      char ch;
      char ch2;
      int      int1;
      int      int2;
}__attribute__((packed))  S_struct;

这是gcc编译器专用的。
不客气。
回复

使用道具 举报

发表于 2005-1-15 22:27:59 | 显示全部楼层
[quote:03018d2251="sy5tem"]可能bigcat写错了吧~~~应该是4字节的[/quote]
-_-!!
布素写错,偶那点编程知识还是当初在学校里玩386+TC2.0时候积累下来的,所以错误在所难免,幸好木有祸害到楼主。
回复

使用道具 举报

发表于 2005-1-16 20:13:32 | 显示全部楼层
[quote:af368cd891="bigcat00"][quote:af368cd891="sy5tem"]可能bigcat写错了吧~~~应该是4字节的[/quote]
-_-!!
布素写错,偶那点编程知识还是当初在学校里玩386+TC2.0时候积累下来的,所以错误在所难免,幸好木有祸害到楼主。[/quote]
你现在用什么语言了?
回复

使用道具 举报

发表于 2005-1-17 09:28:24 | 显示全部楼层
[quote:f378809df5="luckyroot8"][quote:f378809df5="bigcat00"][quote:f378809df5="sy5tem"]可能bigcat写错了吧~~~应该是4字节的[/quote]
-_-!!
布素写错,偶那点编程知识还是当初在学校里玩386+TC2.0时候积累下来的,所以错误在所难免,幸好木有祸害到楼主。[/quote]
你现在用什么语言了?[/quote]
呵呵……去猫扑逛了一圈,后遗症哈。
回复

使用道具 举报

发表于 2005-1-17 14:05:19 | 显示全部楼层
[quote:e50855a32e="bigcat00"][quote:e50855a32e="luckyroot8"][quote:e50855a32e="bigcat00"][quote:e50855a32e="sy5tem"]可能bigcat写错了吧~~~应该是4字节的[/quote]
-_-!!
布素写错,偶那点编程知识还是当初在学校里玩386+TC2.0时候积累下来的,所以错误在所难免,幸好木有祸害到楼主。[/quote]
你现在用什么语言了?[/quote]
呵呵……去猫扑逛了一圈,后遗症哈。 [/quote]
回复

使用道具 举报

发表于 2005-1-20 16:49:31 | 显示全部楼层
这是因为编译器在考虑对齐问题时,在结构中插入空位以控制各成员对象的地址对齐。
如int类型的结构成员x要放在被4整除的地址。
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-6 17:32 , Processed in 0.081157 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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