class A
{
public:
A(){cout<<"执行构造函数创建一个对象\n";}
A(A&){cout<<"执行复制构造函数创建该对象的副本\n";}
~A(){cout<<"执行析构函数删除该对象\n";}
void set(int i){x=i;}
int virtual get()const{ return x;}
private:
int x;
int y;
double z;
};
帮看看下面的c++类占用几个字节?
答案:4 悬赏:50 手机版
解决时间 2021-02-01 10:11
- 提问者网友:孤凫
- 2021-01-31 23:54
最佳答案
- 五星知识达人网友:傲气稳了全场
- 2021-02-01 01:16
24个字节,其中2个int占8个,一个double占8个,虚函数表地址指针占8个字节,即32bit,总共占24*8bit
全部回答
- 1楼网友:封刀令
- 2021-02-01 02:33
24个字节,考虑对齐原则,最长字节double 8字节。所以有,虚函数表指针4个字节 和int x组成第一个8字节,int y 4个字节,后面四个字节补齐(实际上是乱码,没数据,可以理解为空),最后一个double 8字节。
- 2楼网友:空山清雨
- 2021-02-01 01:48
这个涉及到内存字节分配问题,为了内存读取高效,类中整体的字节数等于最大成员字节数的整数倍。您这里double占8个字节,会占用8*n个字节,内容不够整数倍会浪费(你这里是4个字节),此外,还和你的成员排序有关,假如不考虑虚函数,你的排序为:
int x;
double z;
int y;
则会占用|-4-||-空-|
|----8----|
|-4-||-空-|
比你的成员排序多浪费8个字节
- 3楼网友:平生事
- 2021-02-01 01:23
这个情况情况比较复杂,举一个missgya的例子,在电脑上是c是8字节,也就是一个指向虚表的指针的大小,关于这个,再补充一点知识:
空类最常用于作为基类,那时候为了对齐实际可能占4个字节或以上。但这样会浪费空间,尤其是多重继承多个空基类的时候。所以编译器有空基类优化(empty base class optimization, ebco)[1],令无非静态数据成员、无虚函数的基类实际占0字节。
因为bs大大当年说要确保两个不一样的对象拥有不同的地址---“to ensure that the addresses of two different objects will be different.” 就用那1byte来在内存中占用不同地址了。:)
又因为这些空class没有赋值的意义,所以就没必要占用更多内存。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯