从函数c返回值的幕后

从函数c返回值的幕后,第1张

概述在c中从函数返回值的幕后是什么? 在我的理解中每当func.被称为返回地址和堆栈帧(具有局部变量,func.参数和寄存器的被调用顺序)被推送到调用堆栈. 但是当执行遇到返回statemenet时会发生什么?例如 int a( int b ){ int c = b * 2; return c;} 遇到return语句后,存储在EAX寄存器中的C值是否被破坏,局部变量被破坏,堆栈帧从调用 在c中从函数返回值的幕后是什么?

在我的理解中每当func.被称为返回地址和堆栈帧(具有局部变量,func.参数和寄存器的被调用顺序)被推送到调用堆栈.

但是当执行遇到返回statemenet时会发生什么?例如

int a( int b ){   int c = b * 2;   return c;}

遇到return语句后,存储在EAX寄存器中的C值是否被破坏,局部变量被破坏,堆栈帧从调用堆栈中删除,之后EAX寄存器中的值被移入“返回地址”内存?

或者我误解了这个概念?

所有帮助都非常感谢.谢谢.

解决方法 顺便说一句,汇编语言是依赖于处理器的. ARM处理器没有EAX寄存器.

编译器可能具有传递参数和返回参数的标准.从函数返回值的方法取决于实现(编译器).所有编译器都没有标准.

未经优化的代码
编译器旨在利用处理器寄存器.

如果返回值适合单个寄存器,则将使用寄存器返回该值.取决于处理器.

对于较大的对象/值,编译器有两个选项:在多个寄存器中返回对象或返回指向该值的指针.指针可以像堆栈中的索引一样简单,也可以是值所在的地址.

优化代码
编译器可以用简单的处理器指令替换你的函数,甚至删除代码.在这种情况下,没有返回值.

编译器可以将函数计算为常量并将常量放入可执行代码中;因此不需要函数调用或函数返回.

编译器可能决定内联您的函数.在这种情况下,没有返回值,类似于赋值语句.临时变量可用于包含值或另一个寄存器.

更多的信息有关更多详细信息,请研究“编译器理论”.有一本好书,上面有龙……

总结

以上是内存溢出为你收集整理的从函数c返回值的幕后全部内容,希望文章能够帮你解决从函数c返回值的幕后所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1243586.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存