c++中,没有成员变量的类生成的对象,是如何在内存中存储的

我知道,如果一个类有成员变量,那么不论是在栈中,还是堆中,创建对象时,首地址都是成员变量的值。但是如果一个只有成员函数,没有成员变量的类的对象呢?我写的验证小程序里,栈中... 我知道,如果一个类有成员变量,那么不论是在栈中,还是堆中,创建对象时,首地址都是成员变量的值。

但是如果一个只有成员函数,没有成员变量的类的对象呢?
我写的验证小程序里,栈中创建的话,原来存放成员变量的对应的EBP-4处,会是未初始化的CCCCCCCC,如果堆中创建,原来放成员变量处,也是FDFDFDFD。
这是一种什么状况?

另外,我创建一个对象,我知道了其成员变量在内存中的位置,但我应该同时也知道其成员函数在内存中的位置,但大家都说一个对象的大小只是其成员变量的大小之和(加上一个虚函数表指针),那么,成员函数的指针放在哪里?
换而言之,假如我逆向分析,我找到了某个类的某个对象,在堆中创建的位置,我想找这个对象的方法,我该如何找?
展开
 我来答
jackwind1987
推荐于2016-11-08 · TA获得超过2738个赞
知道大有可为答主
回答量:1268
采纳率:50%
帮助的人:496万
展开全部
包括虚的成员函数,函数的地址都不是存在对象的内存里的,有虚函数的对象是存了一个指针指向了一个虚函数表,不是虚函数本身的地址。函数的地址不会存在对象的内存中,非虚函数在编译的时候就能确定下来调用哪个函数,直接生成调用这个函数的代码,虚函数复杂一点,但也只是多了一个过程而已。在汇编层面并没有类和对象的概念,C++的成员函数也是一个普通的函数,只不过是编译器帮我们处理了成员函数到普通函数的映射关系。
帐号已注销
2013-11-05 · TA获得超过3954个赞
知道大有可为答主
回答量:1636
采纳率:77%
帮助的人:1244万
展开全部
没有非静态成员的类的对象至少占一个1个字节,原因就是为了防止其他对象和这个类的对象拥有同样的起始地址(标识符唯一性),有一些特殊情况对象会占0字节。
更多追问追答
追问
这我知道,我问的是如何通过这个对象在内存中的地址,找到这个对象的方法的地址。
这我知道,我问的是如何通过这个对象在内存中的地址,找到这个对象的方法的地址。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友87f48de
2013-11-05 · 超过13用户采纳过TA的回答
知道答主
回答量:73
采纳率:0%
帮助的人:28.8万
展开全部
强烈推荐楼主看看《深度搜索C++对象模型》。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式