摘要: 这篇文章的内容是一个老生常谈的问题----> 函数是如何被调用的。本文用汇编代码研究函数调用的过程,参数调用的方式,函数值的返回。1. 函数是如何实现调用的 函数的调用是用call 和 ret 指令实现的。这里首先简单说明下这call指令的作用:call指令与跳转指令相似,但是不同的是保持返回信息, 即将下一个指令入栈,当遇到ret的时候,返回到这个地址。 呵呵,有点抽象, 下面就用实例来说明,我们写下如下代码: 1 int add(int a, int b) 2 { 3 return a+b; 4 } 5 6 int _tmain(int argc, _TCHAR* argv[]) 7 阅读全文
posted @ 2013-10-10 21:59 stemon 阅读(516) 评论(0) 推荐(0)
摘要: 转载:http://www.cnblogs.com/clor001/p/3329652.html上篇讲述了内存中的封装模型,下篇我们讲述一下继承和多态。二、继承与多态情况下的内存布局由于继承下的内存布局以及构造过程很多书籍都讲得比较详细,所以这里不细讲。重点讲多态。继承有以下这几种情况:1.单一继承2.多重继承3.重复继承4.虚拟继承1.单一继承的场合假设有以下继承关系,那么大致的内存布局如下代码class Parent{public: int p;};class Child:public Parent{public: int c;};class GrandChild:pu... 阅读全文
posted @ 2013-10-10 21:47 stemon 阅读(392) 评论(0) 推荐(0)
摘要: 一、封装模型的内存布局常见类对象的成员可能包含以下元素:内建类型、指针、引用、组合对象、虚函数。另一个角度的分类:数据成员:静态、非静态成员函数:静态、非静态、虚函数1.仅包含内建类型的场合:class T{ int data1; char data2; double... 阅读全文
posted @ 2013-10-10 19:30 stemon 阅读(528) 评论(0) 推荐(0)