函数的返回值保存在内存的什么区域呢?该怎么处理
函数的返回值保存在内存的什么区域呢?
函数的返回值保存在内存的什么区域呢?
望大家详细解答。
------解决方案--------------------
反汇编看看就明白。栈操作而已。
------解决方案--------------------
????楼上的
怎么看,返回值也不在栈里啊
我使用的环境,都是使用寄存器保存返回值
???楼上的使用的是什么计算机和操作系统
------解决方案--------------------
1、结构体大小不超过4字节,那么仍然使用EAX寄存器传递返回值
2.结构体超过4字节但不等于8字节时,调用者将首先在栈上分配一块能容纳结构体的临时内存块,然后在传递完函数参数后将该临时内存块的首地址作为隐含的第一个参数最后(因为压栈顺序是从右到左)压栈,接下的动作同前所述。当被调用函数返回时,它会通过第一个隐含参数寻址到临时内存块并将返回值拷贝到其中,然后将保存有返回值内容的临时内存块的首址存进eax寄存器中,
3、结构体大小刚好为8个字节时编译器不再于栈上分配内存,而直接同时使用EAX和EDX两个寄存器传递返回值,其中EAX保存低4字节数据,EDX保存高4字节数据。
------解决方案--------------------
向楼上学习。
不过编译技术好像也没啥特别死板的国际标准,不同的编译器厂商采用的方式不见得都一样。
------解决方案--------------------
通常在eax寄存器,但例外的情况很容易,所以要想研究,还真得看汇编代码
------解决方案--------------------
对于带构造函数的类,貌似都是采用第二种方法,即使是4个字节或者8个字节大小,也是如此。
------解决方案--------------------
程序中的内存可以划分为几个区:堆,栈,常字符串,还有其它,栈就是用来存放临时变量的地方,在把函数的返回值赋给你的变量之前,就是存在栈当中 的。
函数的返回值保存在内存的什么区域呢?
望大家详细解答。
------解决方案--------------------
反汇编看看就明白。栈操作而已。
------解决方案--------------------
????楼上的
怎么看,返回值也不在栈里啊
我使用的环境,都是使用寄存器保存返回值
???楼上的使用的是什么计算机和操作系统
------解决方案--------------------
1、结构体大小不超过4字节,那么仍然使用EAX寄存器传递返回值
2.结构体超过4字节但不等于8字节时,调用者将首先在栈上分配一块能容纳结构体的临时内存块,然后在传递完函数参数后将该临时内存块的首地址作为隐含的第一个参数最后(因为压栈顺序是从右到左)压栈,接下的动作同前所述。当被调用函数返回时,它会通过第一个隐含参数寻址到临时内存块并将返回值拷贝到其中,然后将保存有返回值内容的临时内存块的首址存进eax寄存器中,
3、结构体大小刚好为8个字节时编译器不再于栈上分配内存,而直接同时使用EAX和EDX两个寄存器传递返回值,其中EAX保存低4字节数据,EDX保存高4字节数据。
------解决方案--------------------
向楼上学习。
不过编译技术好像也没啥特别死板的国际标准,不同的编译器厂商采用的方式不见得都一样。
------解决方案--------------------
通常在eax寄存器,但例外的情况很容易,所以要想研究,还真得看汇编代码
------解决方案--------------------
对于带构造函数的类,貌似都是采用第二种方法,即使是4个字节或者8个字节大小,也是如此。
------解决方案--------------------
程序中的内存可以划分为几个区:堆,栈,常字符串,还有其它,栈就是用来存放临时变量的地方,在把函数的返回值赋给你的变量之前,就是存在栈当中 的。