社区
C++ 语言
帖子详情
一个类实例所占空间大小以及的内存中的排列
chinaplus
2006-10-30 05:30:22
hi,大家好,有个问题想请大家帮个忙.
怎么给类实例分配空间,空间大小是怎么计算的? 还有成员变量和成员函数在内存中是如何排列的呢?
刚才查了下书,
1.class中的成员变量是都占空间的,static属性的变量不占用class的对象的空间,因为static变量的存储位置与类的实例地址没有没有关系.
2.如果有虚函数则要加上一个虚函数表.
但是成员函数所占用的空间怎么计算呢?
谢谢大家了
...全文
257
5
打赏
收藏
一个类实例所占空间大小以及的内存中的排列
hi,大家好,有个问题想请大家帮个忙. 怎么给类实例分配空间,空间大小是怎么计算的? 还有成员变量和成员函数在内存中是如何排列的呢? 刚才查了下书, 1.class中的成员变量是都占空间的,static属性的变量不占用class的对象的空间,因为static变量的存储位置与类的实例地址没有没有关系. 2.如果有虚函数则要加上一个虚函数表. 但是成员函数所占用的空间怎么计算呢? 谢谢大家了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)中的成员变量的顺序与声明的顺序相同,但是不同区块中并没有保证。还有其他问题,如内存对齐等等。
C++
类
继承
内存
布局详解图(一目了然)
看了这个
内存
布局图详解之后,对于C++的了解更加深刻了,之前不懂得一头雾水的东西全都清楚了。
C++
中
类
的
内存
空间
大小
(sizeof)分析
在C语言
中
存在关于结构体的存储
空间
大小
是比较深入的话题,其
中
涉及计算机的基本原理、操作系统等。我认为对齐是C语言
中
让很多初学者都拿不准摸不透的问题,特别是在跨平台的情况下,对齐这种问题更加的复杂多变,每一种系统都有自己独特的对齐方式,在Windows
中
经常是以结构体重最大内置
类
型的存储单元的字节数作为对齐的基准,而在Linux
中
,所有的对齐都是以4个字节对齐。
C++
类
与对象解析[项目代码]
本文深入探讨了C++
中
类
与对象的核心概念,包括
类
的定义、
实例
化过程、对象
内存
模型以及this指针的运作机制。文章详细介绍了
类
的定义格式、访问限定符的作用、
类
域的概念,并通过Stack
类
的实现对比了C++与C语言在封装性上的差异。此外,还解析了对象
大小
计算规则和this指针的底层原理,为读者理解面向对象编程提供了坚实的基础。通过
实例
代码和
内存
模型图示,帮助读者直观掌握
类
与对象的关键知识点。
c++继承
中
的
内存
布局借鉴.pdf
c++继承
中
的
内存
布局借鉴.pdf
C#窗体TabControl控件美化版源代码TabControlEx
话不多说,C#窗体TabControl控件美化版源代码TabControlEx,就是美化标签页,大家可以下载下来看看。新手可以学习学习,老鸟飘过吧
C++ 语言
65,208
社区成员
250,517
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章