您的位置:首页 > 其它

__stdcall的故事版解释

2015-06-13 01:07 417 查看



__stdcall的故事版解释

搬运自我的百度空间

还是我发在csdn上的。。。。

一边墙(堆栈)是大家共用的,我把我的几个命令分别写在几张纸条上,一张黏在一张上贴在墙上,并呼叫服务员(函数)

这时的纸条栈是

-----

我的命令a

我的命令b

-----

由于我与服务员约定了命令的个数(比如2个命令/参数),和最后谁来清理纸条(stdcall/cdecl),服务员查看了墙上最外层的两张,按照我给的命令,服务员也准备要调用后勤人员。他把他的命令写在纸条上(比如有3条命令),贴在了我的纸条栈上,呼叫后勤人员

这时的纸条栈是

-----

服务员的命令1

服务员的命令2

服务员的命令3

我的命令a

我的命令b

-----

后勤人员按照与服务员的约定(参数有3个),查看顶上的三条命令(服务员的命令1、2、3),完成他的工作,由于后勤人员与服务员约定了后勤人员来把纸条清理,于是后勤人员清理了给他的3张纸条,然后告诉服务员OK了

这时的纸条栈是

-----

我的命令a

我的命令b

-----

是不是很神奇呢?被后勤叫回来的服务员回到了公共墙,墙上最外面的两条命令依旧是我给他的命令(虽然已经调用了其他人,只要回到某人时,命令栈的顶部永远是给这个人的命令,这就是栈用在这里的好处)他干完了工作,按照约定,自行清理我给他的两条命令,呼叫我

这时的纸条栈是

-----

-----

我回到命令墙,墙和我调用服务员之前没有任何区别了,纸条栈空了

////////////////////////////////////////////////////////////////////////////////////////////

如果服务员调用了两个函数怎么办?

服务员分别调用后勤a和b

开始调用前纸条栈是

-----

我的命令a

我的命令b

-----

服务员调用后勤a

-----

服务员的命令1

服务员的命令2

服务员的命令3

我的命令a

我的命令b

-----

后勤a返回到服务员

-----

我的命令a

我的命令b

-----

这时服务员不能清除我给他的命令,因为还要调用后勤b才能返回

服务员调用后勤b

-----

服务员的命令4

服务员的命令5

我的命令a

我的命令b

-----

后勤b返回到服务员

-----

我的命令a

我的命令b

-----

服务员完成它所有的工作后,才能清理堆栈

-----

-----

2013-04-26
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: