酱坛子

专注C++技术 在这里写下自己的学习心得 感悟 和大家讨论 共同进步(欢迎批评!!!)

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  66 Posts :: 16 Stories :: 236 Comments :: 0 Trackbacks

公告

王一伟 湖南商学院毕业 电子信息工程专业

常用链接

留言簿(19)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 385361
  • 排名 - 64

最新随笔

最新评论

阅读排行榜

评论排行榜

struct A
{
 int a;
 int b;
 int c;
};

struct B
{

};
int _tmain(int argc, _TCHAR* argv[])
{
 cout<<sizeof(A)<<endl;

 cout<<sizeof(B)<<endl;

 getchar();
 getchar();
 return 0;
}

 

posted on 2007-02-28 16:34 @王一伟 阅读(4126) 评论(10)  编辑 收藏 引用

Feedback

# re: 空struct为何有大小?(求解释) 2007-02-28 18:15 sunyc
你求的是 struct A 这个类型的大小,不是某个A的实例的大小  回复  更多评论
  

# re: 空struct为何有大小?(求解释) 2007-02-28 18:39 王一伟
理论上类型的大小和实例是不会有区别的,我平时需要取实例大小的时候都是用的sizeof(类型),这样比较直观

我刚才也测试了一下用实例来sizeof()结果是一样的都是 12 1  回复  更多评论
  

# re: 空struct为何有大小?(求解释)[未登录] 2007-02-28 20:07 周波
C++是静态编译型语言,本质上源代码中声明的一切变量对于编译器来说都只是一块内存,即使是空struct也一样需要分配,不过只分配1 byte,sizeof应该是4,因为有内存对齐。Stan Lippman的那本Inside C++ Model说得很清楚。  回复  更多评论
  

# re: 空struct为何有大小?(求解释) 2007-02-28 23:32 jone1017
其实可以把结构体看作一个类型,而这个新的结构体里包含3个int类型的数据类型,所以这个结构体的大小应该为4×3 = 12字节  回复  更多评论
  

# re: 空struct为何有大小?(求解释) 2007-02-28 23:59 cd
即使是空的struct一样有大小的,不过是一个字节,
因为一个空结构,虽然没有内部成员,但是必须在内存上有所体现,不然在取地址的时候就出问题了,class也是一样 的
  回复  更多评论
  

# re: 空struct为何有大小?(求解释) 2007-03-01 10:02 王一伟
多谢各位,我理解了。

其实最主要的原因是编译器对内存地址的处理,是为了保证不同的实例不出现相同内存地址的情况做的优化。  回复  更多评论
  

# re: 空struct为何有大小?(求解释) 2007-03-05 21:32 badtiger
应该是12和1
原因:前者不用说了,后者虽然没有数据内容,但是系统还是会分配给一个字节的空间,这时不存在4字节数据对齐。但是如果加入以下内容
char a; int b; B就会变为8字节大小而不是5字节,这时才存在4字节对齐要求,char 要向int 对齐,char将被分配4字节,共8字节  回复  更多评论
  

# re: 空struct为何有大小?(求解释) 2007-03-06 01:06 王一伟
谢谢 badtiger ,确实和你说的一样

系统分配的空间实际上是对避免内存地址的处理

空的struct大小是1
有一个member char型的struct 仍然会是1 呵呵



关于字节对齐,我想问以下 如果你提示系统4字节对齐
struct
{
char a;
int i;
}

struct
{
int i;
char a;
}
的大小是一样的吗  回复  更多评论
  

# re: 空struct为何有大小?(求解释) 2007-04-15 12:26 sandy

没有成员变量的结构或类的大小为1,因为必须保证结构或类的每一个实例在内存中都有唯一的地址。
关于字节对齐请访问http://www.cppblog.com/Sandywin/archive/2007/04/14/21853.html  回复  更多评论
  

# re: 空struct为何有大小?(求解释) 2007-04-15 12:31 sandy
int func(char s[5]);
{
cout<
//数的参数在传递的时候系统处理为一个指针,所
//以sizeof(s)实际上为求指针的大小。
return 1;
}
sizeof(func(“1234”))=4//因为func的返回类型为int,所以相当于
//求sizeof(int).   回复  更多评论
  


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