
深度探索c++对象模型
文章平均质量分 53
sandyzhs
这个作者很懒,什么都没留下…
展开
-
sizeof大全
1,本文详细的对各种可能出现的sizeof进行了测试,基本上以我的经验来说, 好像就覆盖全了。2,各个sizeof的结果肯定都是正确的,因为我是一个一个经过分析+调试得出来的结果;但是分析过程和分析结果可能会有理解不全面的地方,请达人指出来。 3,测试环境:VC64,更多的理论知识,请参考。 5,代码,很长,也有些乱。基本上是以一个一个的namespace做的分割,每个na原创 2008-12-31 08:35:00 · 1396 阅读 · 0 评论 -
《深度探索c++对象模型》学习笔记 - 附录
1. 关于整个书,我觉得如果能够把各种类的sizeof搞定,就肯定OK了。所以请参看另一篇文章"sizeof大全":http://blog.youkuaiyun.com/sandyzhs/archive/2008/12/31/3662902.aspx 2. 对象在内存中的布局(不考虑padding,太复杂;只使用int,并假设sizeof(int) == 4b原创 2009-02-24 09:07:00 · 967 阅读 · 0 评论 -
《深度探索c++对象模型》学习笔记 - 7 站在对象模型的顶端
1. 当异常被抛出时,控制权会从函数调用中转移出来。栈中局部变量被析构,函数调用栈被unwinding。2. 当new[15],在第10个的时候发生了异常,那么前面的9个数据会在try{}大括号结束的时候释放,即所谓的unwind。3. 关于异常的性能、产生临时对象、匹配等问题,看代码和Exceptional C++。4.原创 2009-02-23 12:51:00 · 885 阅读 · 0 评论 -
《深度探索c++对象模型》学习笔记 - 6 执行期语义学
1. 如果一个block {} 或函数中有一个以上的return,或者goto,那么每个离开点都会被放置析构函数。所以,提倡下面的内容是正确的:1)一个函数尽量只有一个出口点return;2)尽量推迟变量定义,以避免不必要的构造和析构。2. 全局对象会被初始化并设初值,局部对象不会。即使对于没有默认构造函数的全局对象,其x.n也会被初始化=0.3.原创 2009-02-23 12:49:00 · 994 阅读 · 0 评论 -
《深度探索c++对象模型》 学习笔记 - 5 构造、析构、拷贝 语义学
1. 纯虚函数一般都没有实现,但它可以被实现,也可以被静态的调用B::api(),但是不能借助虚拟机制进行调用。2. 纯虚析构函数必须被实现,因为每个子类的析构函数都会被编译器扩展以调用基类及再上层基类的的析构函数。否则会导致链接错误:lnk2001 unresolved external symbol。因为:c++保证继承体系中任一类的析构必须会被调用。原创 2009-02-20 09:54:00 · 1439 阅读 · 0 评论 -
《深度探索c++对象模型》 学习笔记 - 4 Function语义学
4 Function语义学1. C++标准要求:非静态成员函数至少必须和一般的非成员函数有相同的效率。2. 成员函数会被编译器mangle为非成员函数,尤其是重载更需要mangle手法进行改名。extern “C”阻止函数改名。3. Static成员函数:1)参数没有this;2)不能访问非静态成员;3)不能是const、virtu原创 2009-02-19 10:35:00 · 1359 阅读 · 0 评论 -
《深度探索c++对象模型》 学习笔记 - 3 data语义学
1. 类对象大小受三方面的影响:1)virtual base或virtual func带来的负担;2)是否EBO;3)alignment(sizeof大全)。2. virtual base class表示“只有一个单一而被共享的实体”,而无论出现在继承体系中多少次。3. c++并不强制“base class subobject的内存排列原创 2009-02-18 09:42:00 · 1453 阅读 · 0 评论 -
《深度探索c++对象模型》 学习笔记 - 1 关于对象
1. C++在布局和存取时间上的主要的额外负担是由virtual引起的,包括:1)virtual function机制,用以实现一个有效率的“执行期绑定”;2)virtual base class,实现“多次出现在继承体系中的base class,有一个单一而被共享的实体”;3)多重继承下,发生在“一个派生类和其第二个或者后继之基类的转换”之间。2. 有两原创 2009-02-16 08:36:00 · 1777 阅读 · 1 评论 -
《深度探索c++对象模型》学习笔记 - 2 构造函数语义学
1. 全局对象的内存会被初始化为0,但是Local对象由于在stack中,所以不会被清0,而是随机的垃圾数据。2. Default constructor 的构建。如果没有用户定义的构造函数,则会有一个默认构造函数被implicitly构建出来,但这个构造函数是trivial constructor(没啥用处的)。如下四种情况下的类,编译器会构建nontr原创 2009-02-17 09:19:00 · 2040 阅读 · 0 评论 -
《深度探索c++对象模型》 学习笔记 - 前言
这是一个学习笔记的系列,预计分为9篇:前言 + 7章 + 附录。简单介绍一下深度探索c++对象模型>(简称)。作者Stanley B. Lippman,不用多说了,是的作者,经常和Meyers、Stroustrup、Koenig这些人厮混在一起的C++大师,参与了第一个C++编译器的实现。在学习C++入门的时候,很多人都推荐C++ Primer,甚至可以代替TCPL(这可是Strous原创 2009-02-13 09:11:00 · 1752 阅读 · 1 评论 -
C++对象布局及多态实现的探索
昨天做题目的时候,发现很多模糊的地方,于是上网查了下。真的发现了一个非常优秀的文章(系列),整整看了一整天,澄清了很多疑虑,也有很多没有看懂的,明天接着看。今天先做个标记。 地址: http://blog.youkuaiyun.com/fisker0303/category/186172.aspx 感谢达人。原创 2008-12-15 17:31:00 · 947 阅读 · 3 评论