关闭

c++ 对象模型(二)

标签: c++对象模型
308人阅读 评论(0) 收藏 举报
分类:

《c++ 对象模型》讲到了,对于虚函数表指针的分布,直接截书中的图

先上代码

struct no_virts
{
	int d1;
	int d2;
};

class has_virts : public no_virts
{
public:
	int d3;
	virtual void foo() { printf("--- has_virts foo \n"); } 
};

void testMemObj()
{
	has_virts hv;
	hv.d1 = 111;
	hv.d2 = 222;
	hv.d3 = 333;

	//无论虚函数放在对象的哪个位置,对象中的虚函数表都是位于对象内存分布的顶端
	Fun pFunc = (Fun)*((int*)(*((int*)(&hv) + 0)) + 0); //foo方法 
	pFunc();

	int d1 = (int)*((int*)(&hv) + 1); //111
	printf("--- d1:%d\n", d1);
	int d2 = (int)*((int*)(&hv) + 2); //222
	printf("--- d2:%d\n", d2);
	int d3 = (int)*((int*)(&hv) + 3); //333
	printf("--- d3:%d\n", d3);
}




0
0
查看评论

[读书笔记] 深入探索C++对象模型-第一章《关于对象》

最新在看深入探索C++对象模型(Inside C++ object model),看的同时针对一些之前没有留意或者理解不深的内容整理一下读书笔记,方便之后复习,也希望可以帮助到有同样疑惑的人。 下面是第一章的内容整理,注:以下部分图片来源于原书: 关于对象(Object Lessons) 1. C+...
  • beyongwang
  • beyongwang
  • 2016-08-21 21:14
  • 645

C++对象模型浅析

VTable 虚表 虚表的内存分布 一个简单的包含虚函数的类的声明 class A { public: virtual void v_a(){} virtual ~A(){} int64_t _m_a; }; /**********************...
  • whn_arthur
  • whn_arthur
  • 2016-02-23 17:29
  • 399

C++ 对象模型详细讲解(特别容易理解)

c++对象模型系列 转    一、指针与引用 一 概括 指针和引用,在C++的软件开发中非常常见,如果能恰当的使用它们能够极大的提 高整个软件的效率,但是很多的C++学习者对它们的各种使用情况并不是都了解,这就导致了实际的软件开发中经常会内存泄漏,...
  • sxh850297968
  • sxh850297968
  • 2014-11-16 21:06
  • 2220

《深入理解C++对象模型》读书笔记(一)

1、           C++类对象模型的中包括非静态成员变量和虚函数表指针,其他静态成员变量和成员函数均放在对象模型之外,所有的对象示例均可以共同使用。如此可以节省访问的时间和空间效率。...
  • zhiren2011
  • zhiren2011
  • 2015-07-31 10:49
  • 1138

图说C++对象模型

0.前言 文章较长,而且内容相对来说比较枯燥,希望对C++对象的内存布局、虚表指针、虚基类指针等有深入了解的朋友可以慢慢看。本文的结论都在VS2013上得到验证。不同的编译器在内存布局的细节上可能有所不同。 文章如果有解释不清、解释不通或疏漏的地方,恳请指出。 1.何为C++对象模...
  • LittleHorseBRO
  • LittleHorseBRO
  • 2016-06-29 22:23
  • 469

《深度探索c++对象模型》学习笔记

1、c++的布局和存取时间成本?封装并未给c++带来任何的空间或执行期的不良后果,c++在布局和存取时间上的主要额外负担由虚拟化引起。包括: 1)virtual function机制。用以支持一个有效率的“执行期绑定”。 2)virtual base class机制。用以实现“多次出现在继承体系...
  • will130
  • will130
  • 2016-05-31 15:48
  • 281

C++虚拟多重继承对象模型讨论

C++虚拟多重继承对象模型讨论     作者:magictong 调试环境:Windows7VS2005   概述 记得刚开始写C++程序时,那还是大学时光,感觉这玩意比C强大多了,怎么就实现了多态,RTTI这些牛逼的玩意呢?当时没有深究,后来零零散散看过...
  • magictong
  • magictong
  • 2014-03-26 19:18
  • 3440

C++继承时的对象模型

点击打开链接 在没有继承时对象的内存模型很简单,成员变量和成员函数会分开存储: 对象的内存中只包含成员变量,存储在栈区或堆区(使用 new 创建对象);成员函数与对象内存分离,存储在代码区。 当存在继承关系时,内存模型会稍微复杂一些。 继承时的内存模型 有继承关系时,派...
  • chengonghao
  • chengonghao
  • 2016-04-05 09:20
  • 519

c++对象内存模型 小记------vs附带查看器

cl [source.cpp] /d1reportSingleClassLayout[classname] 编译选项 示例:其中注意一点,继承中有时会出现一个奇怪的全零字段:vtordisp for vbase .. 以下是解释,直接连接自博客园:http://www.cnbl...
  • A3630623
  • A3630623
  • 2013-07-29 17:00
  • 1024

《深度探索c++对象模型》读书笔记(一)

本文以下内容为深度探索c++对象模型的笔记 深度探索c++对象模型是Stanley B Lippman的著作,对c++进行了较深层次的探讨。于我而言,这本书解答了我多年(半年)的疑惑: 虚函数是怎么实现的? 在此分享一二。由于博主本人水平十分有限,因此只能用简单的形式写出来。 虚...
  • cover_s
  • cover_s
  • 2016-08-30 15:51
  • 592
    博客专栏
    个人资料
    • 访问:514422次
    • 积分:7445
    • 等级:
    • 排名:第3518名
    • 原创:246篇
    • 转载:27篇
    • 译文:0篇
    • 评论:138条
    座右铭

    忠于内心,修炼坚持

    --Wilker_Yun