| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 887 人关注过本帖
标题:结构Struct问题
只看楼主 加入收藏
陈天
Rank: 1
等 级:新手上路
帖 子:66
专家分:0
注 册:2007-2-6
收藏
 问题点数:0 回复次数:12 
结构Struct问题
前断时间遇到一个奇怪的面试题目,问下大家:
struct A
{
char c;
int i;
long l;
}
struct B
{
int i;
long l;
char c;
}
求sizeof(struct A)和sizeof(struct B)?
这两个结构有区别吗?
搜索更多相关主题的帖子: Struct 结构 
2007-10-11 10:20
crazymk
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2007-8-30
收藏
得分:0 
他們佔用的內存空間不一樣,一個是24一個是16。我也搞不懂為什麼會這樣。誰來解釋一下

すばらしいコードを書き出すのは楽しい事です
2007-10-11 10:47
crazymk
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2007-8-30
收藏
得分:0 
我搜索了一下別人的解釋:

内存对齐,为了提高访问效率,编译器会对STRUCT类的东西进行自动填充垃圾字符(PADDING),用于对齐了数据的开头以加快CPU访问的速度

すばらしいコードを書き出すのは楽しい事です
2007-10-11 11:13
crazymk
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2007-8-30
收藏
得分:0 
关于结构体中数据的对齐方式因语言、编译器和CPU而异,但是通常的做法就是把数据成员放置在与该成员的类型较为符合(也称自然放置)的地方。

涉及到計算機組成原理了

すばらしいコードを書き出すのは楽しい事です
2007-10-11 11:20
crazymk
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2007-8-30
收藏
得分:0 
總上所述兩個Struct的內存分配應該是這樣的:
struct A
{
char c; //4
int i; //4
long l; //8
}
struct B
{
int i; //8
long l; //8
char c; //8
}

[此贴子已经被作者于2007-10-11 11:52:15编辑过]


すばらしいコードを書き出すのは楽しい事です
2007-10-11 11:23
陈天
Rank: 1
等 级:新手上路
帖 子:66
专家分:0
注 册:2007-2-6
收藏
得分:0 

还是不懂!

2007-10-11 20:04
tntzwc
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:216
专家分:0
注 册:2007-4-28
收藏
得分:0 
struct A
{
char c; //1
int i; //4
long l; //8
}
以8为单位 第一个8分给 char 还剩7个 再分给 int还剩下 3个 ,由于long占8个所以这3个空下来,用第二个单位。
所以 8+8 =16
ruct B
{
int i; //8
long l; //8
char c; //8
}
以8为单位,第一个8分给 int还剩4个 再分给long 不够,所以剩下4个,第二个单位 分给long,每三个单位分给char 剩7个
看的懂吗?

努力了有可能失败,不努力一定失败!
2007-10-12 12:36
crazymk
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2007-8-30
收藏
得分:0 

了解


すばらしいコードを書き出すのは楽しい事です
2007-10-12 12:41
tntzwc
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:216
专家分:0
注 册:2007-4-28
收藏
得分:0 

那就好,没白写


努力了有可能失败,不努力一定失败!
2007-10-12 15:34
crazymk
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2007-8-30
收藏
得分:0 
我明白了。。不知道lz明白沒

すばらしいコードを書き出すのは楽しい事です
2007-10-12 15:39
快速回复:结构Struct问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020134 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved