函数返回值存在哪里
时间:2011-12-12
来源:互联网
话说函数内部的变量都是存在栈里,那按理说函数结束后,变量生命周期就结束了,为什么返回值还在?
这么多年了还没搞清这个问题,实在惭愧。。。。。。平时的学习太肤浅太浮夸了。。。。。
作者: zero_226 发布时间: 2011-12-12
比如小于4个字节的返回值对象,vc会放入eax
作者: Demon__Hunter 发布时间: 2011-12-12
有时候增加一个返回值地址作为参数,然后在那里构造返回值。
刚刚看了一下调用约定的说明,好像没有说到返回值的问题。
这个取决于编译器的实现吧。如果是我写编译器的话,可能会把返回值放在堆栈顶部。
作者: mingliang1212 发布时间: 2011-12-12
寄存器或者栈上。
比如小于4个字节的返回值对象,vc会放入eax
放在栈上的话,难道不是函数调用结束后就清空?生命周期是结束了的呀
作者: zero_226 发布时间: 2011-12-12
作者: qscool1987 发布时间: 2011-12-12
c++其实不涉及栈(不是STL那个栈)的概念,局部变量是不是要放在栈上,标准可没规定
作者: yisikaipu 发布时间: 2011-12-12
c++其实不涉及栈(不是STL那个栈)的概念,局部变量是不是要放在栈上,标准可没规定
补充一下,异常处理部分有栈展开的概念
作者: yisikaipu 发布时间: 2011-12-12
放在栈上的话,难道不是函数调用结束后就清空?生命周期是结束了的呀
首先纠正你一个误解。函数调用完堆栈不是清空了。而是将函数内的局部变量析构了。
2楼已经说了,只要在调用函数处分配一个足够返回值大小的空间,然后再把这个空间的地址传给函数,作为返回值使用。相当于是在调用函数的地方多了一个临时变量而已。
作者: mingliang1212 发布时间: 2011-12-12

作者: BeTalker 发布时间: 2011-12-12
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28