如果我在C中有一个int main()方法,并且有一个返回值,那么在执行return语句之后该值是否保存在堆栈中,还是在返回后堆栈中没有可见的东西?是否将主方法的返回值保存在堆栈中?
回答
C语言没有定义的问候堆东西,调用约定,或执行如何满足时main
回报会发生什么要求。在实践中,许多实现,调用main
入口点代码,只要调用约定将第一个参数传递给函数(exit
这里)在堆栈上做一些像exit(main(argc, argv));
在这种情况下main
返回值肯定会在堆栈上,但是否这种情况在实施中差别很大。
这完全是取决于实现 - 操作系统处理在main
之前和之后发生的情况。
有机会,有围绕主通话,接收在一个局部变量的返回值,并将其存储的框架。但无论如何,随着程序结束并完成,您将无法访问它。
在我知道的系统中,main
被视为与任何其他函数一样(并且它必须是对于main的递归调用是可能的),所以返回值以ABI指定的任何方式传递。通常情况下,这不是堆栈,因为当函数返回时函数的堆栈框架被销毁,这会稍微有些尴尬。在x86系统中,返回值通常在EAX/RAX寄存器中设置。
'它必须是,对于递归调用main才是可能的' - 必须允许递归调用main()的标准/ – ThingyWotsit
@ThingyWotsit,C++禁止它。 C没有,但提到“从_initial_调用返回到主函数相当于调用退出函数”[\ [1 \]](http://stackoverflow.com/a/3728153/6372809)[ \ [2 \]](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf),这意味着它不被禁止。 [随机提到差异在SO](http://stackoverflow.com/questions/38560971/how-to-call-main-from-other-functions-in-c) – ilkkachu
好的,谢谢你的信息:) – ThingyWotsit
- 1. C#7.0中引用返回的值是否存储在堆栈或堆上?
- 2. 将活动保留在堆栈中,但只返回主
- 3. 返回堆栈中的值 - C++
- 4. 去 - 返回堆栈
- 5. 的std ::堆栈腐败返回值
- 6. 堆栈上的C++存储保存在堆栈上
- 7. C++返回参考/堆栈内存
- 8. Python是否将函数参数加载到寄存器中,还是将它们保存在堆栈中?
- 9. 返回堆栈中的中间元素
- 10. 方法的代码块在执行时是否处于堆栈或堆中?
- 11. 在函数中创建的对象,是保存在堆栈还是堆上?
- 12. iOS中的堆栈项目是否存在内存限制?
- 13. ArrayList中的存储方法返回值
- 14. Android片段返回堆栈
- 15. 返回指令堆栈中的指针
- 16. 如何将循环中的值返回主方法?
- 17. 如何在MULE中将堆栈跟踪返回给客户端?
- 18. 'this'引用是否存储在Java的调用堆栈中?
- 19. 内存中的堆栈实际上是一个堆栈吗?
- 20. UINavigationBar是否保留将UINavigationItems推入其堆栈?
- 21. 为什么.NET将简单类型(int,..)保存在堆栈中?
- 22. 如何将字段管理器保存在堆栈中
- 23. 是否有可能从Java中的方法返回多个值?
- 24. 是否有一种快速方法将保存的数据返回到其默认值mongoose.js
- 25. Rails将方法保存在方法中
- 26. 如何确定保存在堆栈上的值?
- 27. 推断一个方法的堆栈内存在Java中使用
- 28. 是否可以在Lua中禁用堆栈回溯?
- 29. const char *值将存储在哪里。什么是堆栈崩溃和堆崩溃?
- 30. Bitnami堆栈是否有效?
它取决于架构和调用约定和返回类型。例如,通常在x86_64上,整数返回值将存储在寄存器rax中,而不是堆栈中。例如,如果你返回一个浮点值,或者一个结构体,它将会不同。 –
C不支持_methods_。它也没有提到使用堆栈! – Olaf