linux c函数返回值是在栈中还是寄存器

如题所述

函数的返回值是在寄存器中,但仅限于返回的是值。
如果返回的地址,并且这个地址是个局部变量的地址,那么就是在栈上,所以我们不建议返回这样的地址结果。
如果返回的是一个malloc或者new的变量的地址,就是在堆上。如果要返回地址,建议这样做,还要注意使用完成后进行内存释放
温馨提示:内容为网友见解,仅供参考
第1个回答  2018-04-14
存在堆中。就比如说你在一个函数中,把一个局部变量a在函数最后return a;此时a就被系统自动释放了,但是return a(即返回值)并没有跟a一起消失。
第2个回答  2016-08-08
什么是栈,什么是寄存器?
上了操作系统,基本上就没有寄存器这个概念了,除非是内核模块本回答被提问者采纳

linux c函数返回值是在栈中还是寄存器
函数的返回值是在寄存器中,但仅限于返回的是值。如果返回的地址,并且这个地址是个局部变量的地址,那么就是在栈上,所以我们不建议返回这样的地址结果。如果返回的是一个malloc或者new的变量的地址,就是在堆上。如果要返回地址,建议这样做,还要注意使用完成后进行内存释放 ...

函数的返回值存在哪?
对于四字节的返回值,一般编译器把它放入eax寄存器里,而大于4字节的返回值,一般是放在会在栈中返回地址前的位置。可以肯定的是,应该不是在堆里。楼上所谓的临时区域,就是寄存器。只要不是用汇编,一般在高级语言中,我们不需要关心返回值放哪儿了,编译器为会根据你的使用方法选个好地方的。但一般...

关于 函数返回值储存和栈的问题
局部变量是通过偏移来访问的,不需要压栈退栈,所以没有这个操作。函数的返回值在c\/c++里面是通过eax来返回的,比如return 1,那么1被存入eax,然后main里通过eax来获取这个值,局部变量的值也是一样的。

C语言的返回值问题,请作详细解释
在底层一点的汇编语言里面,函数调用是通过栈实现的,函数块内的变量所需的空间都在栈上分配。C语言的return语句对应了汇编语言的一条函数调用返回的指令,CPU的寄存器单元里面有一个特殊的专门用来存取函数返回值的寄存器,这条返回指令执行的时候。并不是返回的flag,而是把flag里面的值先复制到了这个特殊...

关于函数返回值的存储问题?
用来保存这个函数执行期间用到的局部变量;3、函数的返回是被保存在寄存器里的(这个返回指的是return,不包括通过参数返回或者全局变量),栈空间由程序自动维护,函数退出以后栈的内容其实不会更改,只是栈指针复位,所以函数内部的局部变量声明了如果不赋值,它的值就是随机的也就是这个道理。

c语言指针和函数的问题
被调函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。二、 C语言中的函数参数传递机制 在C语言中,值传递是唯一可用的参数传递机制。但是据笔者所知,由于受指针变量作为函数参数的影响,有许多朋友还...

c语言中函数返回值可以是数组、字符串和结构体吗?
比如 int 返回值类型、指针返回值类型,在ia32平台上都是直接返回到eax寄存器 不管是vc还是gcc, 对于像float 类型的浮点返回值类型,在ia32平台,往往借助于fpu浮点运算器部件中的寄存器存储于栈中,第三类就是像struct结构体返回值,它需要建立临时对象,对于c语言来说引入一个临时内在区域是问题不大...

函数返回值传递
因此,展示的调用栈是不完整的,仅展示了从main函数开始的部分调用过程。实验结果与书中描述存在差异,可能是因为书籍出版时间过早,某些规范经过修改,但思想上并没有太大变化。实验结果强调了在函数返回值大于特定字节时,内存栈和寄存器在传递返回值中的作用,以及使用gdb调试工具分析这些过程的重要性。

在汇编语言中调用函数后,函数返回值存储在哪里?
在主程序中每次调用函数时,先依次把各参数以相反的顺序入栈;然后call func_name, 这里call要做两件事: 一是把函数的返回地址入栈,二是让指令执行指针%eip指向函数开始处。开始执行 现在函数要开始执行了,但它执行函数代码前还要做一点小事,首先把原来的基地址寄存器%ebp值入栈,因为在程序执行中...

在Linux-0.11中实现基于内核栈切换的进程切换
具体步骤如下:1. 在system_call中执行完系统调用后,将返回值eax压入内核栈。若需调度,则跳转执行reschedule。否则执行ret_from_sys_call。2. 在执行schedule前将ret_from_sys_call压栈,schedule作为C函数执行完毕后,会弹出ret_from_sys_call作为返回地址继续执行。3. 在系统调用结束后,中断返回前...

相似回答