VC++6.0中,返回值为一个结构体时,对象复制2次的问题
来源:互联网 发布:淘宝网上眼镜店哪家好 编辑:程序博客网 时间:2024/05/17 08:49
VC++6.0中,如果返回值较小,则储存在eax中返回,假如较大,如一个结构体,实验如下:
#include<iostream>using namespace std;struct A{int hour;int minute;int second;float day;};A sum(A );int main(){A b;A mon={1,2,3,4.1};sum(mon);cout<<mon.hour<<":"<<mon.minute<<endl;return 0;}A sum(A a){a.hour++;a.mintue++;a.second++;return a;}
main函数的栈中,[EBP-10]~[EBP]是变量b存储空间,[EBP-20]是变量mon的。
调用函数num()时,会把[EBP-40]的地址压入,并且在子函数num()中,把返回值存放到[EBP-40]中,并且把这个地址放入eax中返回
调用结束,返回后,再把[EBP-40]~[EBP-30]处的结构体数据传递给[EBP-30]处,最后传递给变量b中。
也就是说,比起int型的返回值,这个返回的对象被复制了2次:
第一次在子函数中,复制在一个隐藏的参数所指向的空间里(该空间在主函数栈中开辟——[EBP-40]);
第二次在返回后,复制在主函数的栈中——[EBP-30]
即使不把返回值赋给变量b,依旧会进行2次复制,把返回值保存到[EBP-30]处。
为什么要复制2次,并且在主函数销毁之前,显然这两个副本是一直存在的。我不知道。。。期待大能的解惑。。。。
- VC++6.0中,返回值为一个结构体时,对象复制2次的问题
- 文档中对象层的次结构
- 一个返回json对象的问题 key 为数字时 会默认从小到大进行排序
- VC中结构体的相关问题
- 在VC中使用ADO碰到的一个返回值溢出问题
- 解决cxf中list中对象为1个时返回json串问题的配置文件
- vc中获取一个线程的状态及返回值
- VC中几个小问题总结---文件复制,重命名,结构体初始化
- 解决Hibernate查找视图有一个空值的时候返回的对象为null的问题
- 定义一个结构体变量(包含年月日),写一个函数,计算该日期在本年中为第几天?要求写一个days函数。参数是此结构体类型的变量,返回值是整数。
- C语言结构体中指针的复制问题
- 使用ctypes调用C共享库中函数返回值为链表式结构时的方法
- 定义一个结构体变量(包含年月日),计算该日在本年中为第几天?要求写一个days函数。参数是此结构体类型的变量,返回值是整数
- 3、定义一个结构体变量(包含年月日),计算该日在本年中为第几天?要求写一个days函数。参数是此结构体类型的变量,返回值是整数。
- 简化版定义一个结构体变量(包含年月日),计算该日在本年中为第几天?要求写一个days函数。参数是此结构体类型的变量,返回值是整数
- 定义一个结构体变量(包含年月日),计算该日在本年中为第几天?要求写一个days函数.参数是此结构体类型的变量,返回值是整数
- 定义一个结构体变量(包含年月日),计算该日在本年中为第几天?要求写一个days函数。参数是此结构体类型的变量,返回值是整数。
- C++返回值为对象时复制构造函数不执行怎么破
- UIkit结构图
- 什么是IEEE
- unity3d的性能优化
- 金数据助力微信营销 或将成小电商新宠
- Hive内置函数的使用(1)
- VC++6.0中,返回值为一个结构体时,对象复制2次的问题
- 什么是IEEE 802.11
- Spring MVC 中的基于注解的 Controller
- mysql根据数据库自动生成实体(dto,service,impl,mybatis,xml)
- linux 连公司网络
- 水题Q2005
- 关于表单设计 每个管理执行人员都应该知道的
- How to Realize the Two's Complement of -128?
- 线性代数导论12——图和网络