【cpp】reference & copy constructor

最近在看thinking in cpp

其实不是因为闲,恰恰是以为太忙了,大块的时间没有了,只有一些零碎的时间,于是用来学点自己感兴趣的东西

今天看到reference & copy constructor这一章

这本书果然写的很通俗易懂,扫除了我的许多以前的知识盲点。

看到了函数的return value保存在哪个地方的这一章,觉得很有意思

于是做了个实验,研究了一下vs2008中编译出来的汇编代码

最后想清楚了。return value是保存在stack上的

先保存argument,在保存return value的指针

然后再调用cal

为什么这么做?

可以放return value的地方:

1. register。不够大

2. 放在return address的下面。即return address先入栈,然后再把return values入栈。但是很危险,可能会被ISR抢占,然后清除掉return value

3. 在栈中单独开辟一个区域放return value。和C不兼容

采用的办法:在当前栈的空位置中给return value分配一块地方。然后把指向这个地方的指针当做该函数的一个参数压栈。返回值就写到这个指针指向的地方

效率高

明天再确认一下这个事情。

原文地址:https://www.cnblogs.com/chenhuanfa/p/3474006.html