一个类实例所占空间大小以及的内存中的排列

chinaplus 2006-10-30 05:30:22
hi,大家好,有个问题想请大家帮个忙.
怎么给类实例分配空间,空间大小是怎么计算的? 还有成员变量和成员函数在内存中是如何排列的呢?

刚才查了下书,
1.class中的成员变量是都占空间的,static属性的变量不占用class的对象的空间,因为static变量的存储位置与类的实例地址没有没有关系.
2.如果有虚函数则要加上一个虚函数表.

但是成员函数所占用的空间怎么计算呢?
谢谢大家了




...全文
257 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinaplus 2006-10-31
  • 打赏
  • 举报
回复
哦,大概是这样的意思了,类的成员变量是每个对象都有一个拷贝的,类的成员函数就没有必要每个对象都有一个拷贝,成员变量和成员函数保存的地方不一样吗?按常理应该类的对象中应该有有个指向非virtual成员函数的指针吧.
superxiaomm 2006-10-31
  • 打赏
  • 举报
回复
1,函数都在函数段上面
2,由于多态,所以要用vfptr,占4B,这就是为什么后面的是8,前面是4了
3, 你还没有考虑virtual 继承,那个更复杂,不过你可以先不需要考虑
chinaplus 2006-10-31
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

class CNonVirtual
{
int a;
public:
void x() const{};
int i() const {return 1;}
};

class COneVirtual
{
int a;
public:
virtual void x() const{};
int i() const {return 1;}
};

class CTwoVirtual
{
int a;
public:
virtual void x() const{};
virtual i() const {return 1;}
};

void main()
{
CNonVirtual nonVirtual;
COneVirtual oneVirtual;
CTwoVirtual twoVirtual;
cout<<"NonViraul "<<sizeof(nonVirtual)<<endl;
cout<<"OneViraul "<<sizeof(oneVirtual)<<endl;
cout<<"TwoViraul "<<sizeof(twoVirtual)<<endl;
}

运行结果:
4
8
8

难道类的成员函数不占用空间?
请高手给点指点啊?
chinaplus 2006-10-31
  • 打赏
  • 举报
回复
谢谢大家!
OOPhaisky 2006-10-31
  • 打赏
  • 举报
回复
怎么给类实例分配空间,空间大小是怎么计算的?
答:动态分配用new/new[],静态分配由编译器完成。

还有成员变量和成员函数在内存中是如何排列的呢?
答:首先,成员函数并不会在对象的内存布局中留下任何“蛛丝马迹”,也就是说,成员函数并不是保存在对象中。
然后,成员变量在内存中的布局,C++标准只是保证在同一个区块(public/protected/private)中的成员变量的顺序与声明的顺序相同,但是不同区块中并没有保证。还有其他问题,如内存对齐等等。

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧