main() 总是在堆栈上吗?
Is main() always on the stack?
堆栈上是否有 main(( 的永久激活记录?这意味着在程序终止之前,它永远不会从堆栈中弹出。
我想如果main((总是坐在堆栈的底部直到程序终止,那么堆栈将为main((提供一个特殊的位置。就像静态变量和全局变量在堆栈上有自己的空间一样。
但我离题了。
我只是好奇 main(( 是否总是在堆栈上。它似乎是合乎逻辑的,当它被弹出时;触发程序执行。但我仍然很好奇,也许它比这更有趣。
C++语言没有指定"堆栈"之类的东西(除了std::stack
容器(。不一定在每个语言实现上都有这样的东西。因此,无法保证main
"在堆栈上"(无论您的意思是什么(。
如果我们看一下特定的语言实现,例如Linux上的GCC,您会发现main
实际上甚至不是第一个要运行的函数。默认入口点是一个名为_start
的函数,它在调用之前执行初始化__libc_start_main
在调用main
之前执行更多初始化。在此实现中,main
的参数和局部变量的分配以及从中返回的参数和变量可以采用与任何其他函数相同的方式完成。
main
是一个函数,就像其他函数一样。 初始化完成后,从运行时库调用它,当main
返回时,运行时库终止程序。
因此,堆栈上是main
声明的任何局部变量,以及执行完成main
(或遇到return
语句(时要返回的返回地址。
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 代码在main()中运行,但在函数中出现错误
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 算法问题:查找从堆栈中弹出的所有序列
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- 函数是否可以访问传递给main()的参数
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 我的 int main() 中出现堆栈溢出错误
- "main"函数堆栈中的对象在第一个任务运行时被覆盖 (FreeRTOS)
- main() 总是在堆栈上吗?
- 清除在 main() 中分配的堆栈内存?
- 2 [main] hw3 10368 cygwin_exception::open_stackdumpfile:将堆栈跟
- 使用小型2D阵列会导致堆栈溢出(main之前的seg错误)
- gdb回溯没有显示main()的完整堆栈跟踪
- 输入 main() 之前出现堆栈溢出异常
- main函数之前的堆栈内容
- main()之前的堆栈溢出异常
- 在main内声明的数组引发堆栈溢出,在main外声明的数组则不会