The Fourth Dimension Space

枯叶北风寒,忽然年以残,念往昔,语默心酸。二十光阴无一物,韶光贱,寐难安; 不畏形影单,道途阻且慢,哪曲折,如渡飞湍。斩浪劈波酬壮志,同把酒,共言欢! -如梦令

注意一个细节

#include<iostream>
using namespace std;


struct node {
    
int a;
    
char b;
}
;

int main ()
{
    cout
<<sizeof(node)<<endl;
    system(
"pause");
    
return 0;

}

这段代码运行后 您认为应该输出几呢?
上课的时候老师突然提出了这样一个问题,当时我想都没想 直接回答了 5。
呵呵 答案当然是错的 现在来运行一下这个程序 发现这个程序的结果是8;

 
PS:感谢楼下两位朋友的提问 让问题变得更有意思了 内部原理究竟是怎样的呢?希望知道的朋友能够予以解答
我在这里仅给出一些测试现象 
 struct node
{
};
输出为1

struct node
{
char a;
};
输出为1

struct node
{
int a;
double b;
};
输出为16

struct node
{
char a;
char b;
char c;
char d;
char e;
}
输出为5

posted on 2009-03-26 00:10 abilitytao 阅读(304) 评论(7)  编辑 收藏 引用

评论

# re: 注意一个细节 2009-03-26 00:29 陈梓瀚(vczh)


你可以把上面的int改成double,你会发现结果是16。  回复  更多评论   

# re: 注意一个细节 2009-03-26 15:27 Sunshine Alike

@陈梓瀚(vczh)
是啊,我试过之后发现int和double两个成员一起size是16,能解释一下原因么,因为要与double进行对齐么?  回复  更多评论   

# re: 注意一個細節 2009-03-27 22:00 Wisely

這跟data structure alignment有關
而且通常是compiler & OS dependent
你可以google一下 應該可以找到很多介紹  回复  更多评论   

# re: 注意一个细节 2009-03-27 22:22 abilitytao

@Wisely
搜过了 但是貌似没有结果   回复  更多评论   

# re: 注意一个细节 2009-03-28 00:23 Sunshine Alike

@abilitytao
我今天查到一篇文章,里面好像有这方面的解释
原文地址
http://www.cppblog.com/andxie99/archive/2006/10/26/14230.html  回复  更多评论   

# re: 注意一个细节 2009-04-01 23:20 pp

传说中的内存对齐机制......  回复  更多评论   

# re: 注意一个细节 2009-04-01 23:22 pp

补充:
一般情况下XX宁可牺牲一点内存,可以大大提高效率
嘻嘻~
  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理