免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 1513 | 回复: 12
打印 上一主题 下一主题

请教sizeof [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-10-11 16:16 |只看该作者 |倒序浏览
各位大侠,请教一下:
class a
{
int gg;
char b[19];
float f[2];
inline void test() {cout <<"test"<<endl;}
} ;

如果写sizeof(a)或者是
a a1;
sizeof(a1);
都是什么意思?是class a中所有成员的大小之和吗?请不吝赐教,谢谢

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-10-11 16:24 |只看该作者

请教sizeof

class a所占的空间大小,并不一定是所有成员的大小之和。

论坛徽章:
0
3 [报告]
发表于 2004-10-11 16:35 |只看该作者

请教sizeof

那class a所占空间大小具体应该怎么计算?请明示,多谢先

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2004-10-11 16:44 |只看该作者

请教sizeof

呵呵,C++不太懂,涉及到里面有函数了,不过猜想函数也只在类的空间里面占了一个指针的位置吧?
关于成员变量所占的空间,主要就是考虑类型占用的空间,和内存对齐的设置。

论坛徽章:
0
5 [报告]
发表于 2004-10-11 16:47 |只看该作者

请教sizeof

我测试了一下,好像函数根本就没有占用空间,比如上面这个类,如果加上#pragma pack(1)就是31,如果不加#pragma pack(1)就是32,根本没有算函数的大小啊,呵呵,谁知道的请说?多谢

论坛徽章:
0
6 [报告]
发表于 2004-10-11 16:50 |只看该作者

请教sizeof

int 4位,char 19,float 2*2,"test" 4位,加起来31,加上char对齐为4的倍数,为20,所以为32

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2004-10-11 16:52 |只看该作者

请教sizeof

呵呵,是啊。是不是因为成员函数是inline的问题啊?试试去掉inline看看。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2004-10-11 16:57 |只看该作者

请教sizeof

[quote]原帖由 "mudga"]int 4位,char 19,float 2*2,"test" 4位,加起来31,加上char对齐为4的倍数,为20,所以为32[/quote 发表:


大哥,做做测试好不好,float类型是占4个字节的。

论坛徽章:
0
9 [报告]
发表于 2004-10-11 17:02 |只看该作者

请教sizeof

函数怎会占空间?
其实,结构中并无代码,G++编译仅仅记忆了函数属于那个class,
函数还是在函数应该在的地方。

如果结构中定义的函数指针就占了。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
10 [报告]
发表于 2004-10-11 17:12 |只看该作者

请教sizeof

原帖由 "思一克" 发表:
函数怎会占空间?
其实,结构中并无代码,G++编译仅仅记忆了函数属于那个class,
函数还是在函数应该在的地方。

如果结构中定义的函数指针就占了。


thx,明白了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP