__stdcall的故事版解释
2015-06-13 01:07
417 查看
搬运自我的百度空间
还是我发在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
__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
相关文章推荐
- Java学习之Iterator(迭代器)的一般用法 (转)
- PARENT VIEW INVALIDATE
- java 源码学习方法
- 轻松搞定面试中的二叉树题目
- POJ 2656 解题报告
- __stdcall与__cdecl的区别
- vs2012下编译ezrgb24所想
- Codeforces Round #248 (Div. 2) (ABCD题解)
- Ubuntu 教程 - 更改 Ubuntu 使用语言
- 操作系统 ---进程管理7
- python之程序打包
- python之扩展
- [LeetCode] Invert Binary Tree 翻转二叉树
- python之测试
- python之万维网
- python之网络编程
- python之数据库支持
- POJ 1953 解题报告
- python之图形界面
- python之文件和素材