函数返回值传递
来源:互联网 发布:乔丹职业生涯场均数据 编辑:程序博客网 时间:2024/06/06 18:31
出自《程序员的自我修养-链接、装载与库》P299
eax,edx是函数传递返回值的寄存器,这是由芯片厂商和编译器决定的。
1.对于小于4个字节的数据函数将返回值存储在eax中。
2.5~8个字节对象的情况调用惯例都是采用eax和edx的联合返回方式进行,eax存放低32位,edx存放高32位。
3.大于8个字节的返回类型,用一下代码测试:
1 typedef struct big_thing 2 { 3 char buf[128]; 4 }big_thing; 5 6 big_thing return_test() 7 { 8 big_thing b; 9 b.buf[] = 0;10 return b;11 }12 13 int main()14 {15 big_thing n = return_test();16 }
- 首先main函数在栈额外开辟了一片空间,并将这块空间的一部分作为传递返回值的临时对象,这里称为temp
- 将temp对象的地址作为隐藏参数传递个return_test函数
- return_test 函数将数据拷贝给temp对象,并将temp对象的地址用eax传出。
- return_test返回以后,mian函数将eax 指向的temp对象的内容拷贝给n。
如果返回值的类型的尺寸太大,c语言在函数的返回时会使用一个临时的栈上内存作为中转,结果返回值对象会被拷贝两次。因而不到万不得已,不要轻易返回大尺寸对象
0 0
- 函数返回值传递
- 函数返回值传递方式
- 函数返回值如何传递
- 函数返回值的传递
- C++函数参数传递和返回值
- C++函数参数传递和返回值
- 拷贝构造函数 参数传递 返回值
- 函数参数和返回值的传递
- 函数返回值与参数传递
- 函数参数的传递和值返回
- C函数参数传递与返回值传递
- 函数返回值的传递方式(值传递、指针传递、引用传递)
- 数组做函数参数传递和函数返回值
- C++函数的参数传递、返回值及函数声明
- C++内存分配、函数调用(值传递、指针传递、引用传递)、返回值问题
- 函数的参数和返回值的传递方式
- C++ - 函数的参数传递方式和返回值
- x64 调用约定,参数传递以及函数返回值
- 关于 文件读写 和 char
- 继拷优mini后拷优PRO也正是支持对防拷U盘的穿透功能!
- 北京耀华德昌工程师赵光远变压器选型—抗电强度浅谈
- App Store审核指南中文版(2014.9.3更新):新增扩展、HealthKit、HomeKit以及TestFli
- OC的几个知识点总结
- 函数返回值传递
- 我之见--java 多线程任务的取消
- App Store审核指南中文版(2014.9.10更新):新增Apple Pay相关内容
- git grep选项
- linux相关知识点
- 2014年9月8日 话费要下调了吗
- 使用Doxygen生成代码文档
- BZOJ 1502 NOI2005 月下柠檬树 Simpson自适应公式
- 程序员常去的14个顶级开发社区