运维开发网

C语言中班级规模的详细介绍

运维开发网 https://www.qedev.com 2022-05-02 16:51 出处:网络
这篇文章主要为大家详细介绍了C++中的类的大小,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

这篇文章主要为大家详细介绍了C++中的类的大小,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助


一、普通类的大小#includelt;iostreamgt;using namespace std;class MyClass{public:MyClass(){int i = 0;float f = 0.01f;};int getI(){return i;}int getF(){return f;}private:int i;float f;//静态变量实际上是其全局变量,它存储在全局/静态存储区,不占对象空间static int staNum;};int MyClass::staNum = 2;int main(){MyClass myclass;cout lt;lt; "myclass的大小" lt;lt; sizeof(myclass) lt;lt; endl;return 0;}


我们可以看到只有两个成员变量,每个4字节,在创建类的对象中真正占用了stack 空。静态成员变量实际上是和全局变量一起存储在全局存储区的,而成员函数和其他函数一样存在于代码区。


二、空类的大小#includelt;iostreamgt;using namespace std;class MyClass{public:MyClass(){};private:};int main(){MyClass myclass;cout lt;lt; "myclass的大小" lt;lt; sizeof(myclass) lt;lt; endl;return 0;}


在使用类的指针时,如果类的大小为0,那么如果排列在一起的几个空类的地址都相同,怎么知道是哪一个呢?


三、自动填充类或者结构体的大小#includelt;iostreamgt;using namespace std;struct MyStruct1{bool b1;bool b2;int i1;};struct MyStruct2{bool b1;int i1;bool b2;};struct MyStruct3{bool b1;short s1;};int main(){MyStruct1 s1;MyStruct2 s2;MyStruct3 s3;cout lt;lt; "MyStruct1的大小" lt;lt; sizeof(s1) lt;lt; endl;cout lt;lt; "MyStruct2的大小" lt;lt; sizeof(s2) lt;lt; endl;cout lt;lt; "MyStruct3的大小" lt;lt; sizeof(s3) lt;lt; endl;return 0;}


当我们以不同的顺序排列变量时,我们会发现类的大小并不相同。第一种情况,MyStruct中的两个布尔值连在一起,如果后面没有变量,编译器会自动填充2个字节;现在后面有了一个塑造的我。整形跨越两个4字节,读取整形时需要两个4字节。因此,编译器在这种情况下也会在i1中填充2个字节,所以i1从下一个字节开始。对于第二种情况,在MyStruct2中,因为两个Boolean类型被shaping分开,所以我们需要填充两次。第三种情况,因为MyStruct3中的short只有两个字节,所以只需要填充一个字节。


总结

本文到此为止。希望能帮到你,也希望你能多多关注源搜网的更多内容!


0

精彩评论

暂无评论...
验证码 换一张
取 消