如何理解c++ class中成员与分配内存的问题

发布时间:2021-10-08 11:30:39 作者:iii
来源:亿速云 阅读:153

这篇文章主要介绍“如何理解c++ class中成员与分配内存的问题”,在日常操作中,相信很多人在如何理解c++ class中成员与分配内存的问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解c++ class中成员与分配内存的问题”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

目录

1.内存补齐

便于管理类(生成的对象)的内存,类总内存总是为最大成员字节大小的倍数,不足的会进行内存补齐

类的整体内存就是由n块最大成员字节大小的区域组成的

而内存的分配对于成员变量来说是按照书写顺序来的(也就是构造顺序)如果不足最大成员大小,就自动填充

后一位变量如果无法排在前一位变量的那一块内存里面,就直接再开拓一块最大成员字节大小的空间存放自己,前一位的剩余空间自动填充

class A{   //sizeof = 8
  int a;
  char b;
  short c;
};

class B{  //sizeof = 12
  char a;
  int b;
  short c;
};

上面类A,B,最大都是int 4字节 :

A类,第一个是int ,4字节全部填满; 第二个char,1字节,还剩3字节;第三个short,2字节,补在第二个空间后,还剩一个字节自动补齐,一共2*4=8字节

B类,第一个是char,1字节,还剩三个字节;第二个int,4字节,第一个剩的空间不够,直接开拓下一个4字节,剩下的三字节自动填满;第三个short,2字节,还剩2字节自动补齐,一共3*4=12

2.特殊情况--virtual函数

如果一个类里面有虚函数,类会自动生成一个虚函数表指针,4字节的来管理虚函数

一个类无论有几个虚函数都只有有一个四字节的指针

而且这个指针在其他成员之前生成,也就是和你写虚函数的顺序无关

比如:

class A{            //实际上sizeof = 2*4=8 ,而不是12
  char a;
  virtual void f() {}
  short b;
};

上面等价于

class A{  
  T *table //虚函数指针      
  char a;
  short b;
};

按照上面的方法可得sizeof = 8

同样,由于虚函数指针是四个字节,如果成员里面有更高字节的,同样内存补齐

class A{                //sizeof = 8*2 = 16
  virtual void f() {}    
  double a;
};

3.不需要考虑的内存

每个对象所占用的存储空间只是该对象的数据部分(虚函数指针和虚基类指针也属于数据部分)所占用的存储空间,而不包括函数代码所占用的存储空间

一些看似成员的要注意不算内存

如:

一.静态函数和变量 :

静态函数和变量都不属于类管理,统一在常量内存区里面

二.非虚函数的成员函数 :

不是每一个对象都会生成成员函数,类的成员函数在其他内存区,对象用this指针调用的成员函数,其地址固定

三.友元函数和非虚函数的成员函数性质一样

到此,关于“如何理解c++ class中成员与分配内存的问题”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. 【C/C++语法外功】类的静态成员理解
  2. 《Java架构筑基》从Java基础讲起——深入理解Static

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++

上一篇:css属性使用中的一些注意事项分别有哪些

下一篇:批处理如何隐藏自身窗口

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》