我是操作系统的初学者。这个问题是我的教授提出的,让我很困惑。我希望我能在这里得到一些提示和帮助。
在我的内存中,ELF文件是可以相互链接的。这是 ELF 文件不能有堆栈段的原因吗?
非常感谢您的帮助!
最佳答案
这是因为stack不是需要以文件格式保存的东西,它完全是和runtime执行相关的。就像您的文件中不需要“堆段”一样。
另一方面,堆栈属于执行线程,不数据或函数,它没有固定大小。考虑一个递归函数:
int foo() {
printf("Stack Overflow!\n");
return foo();
}
每个递归在堆栈中都有自己的帧,没有堆栈属于foo()
本身,仅供其执行。
当然你可以在你的文件中保留一个栈段,就像一大块静态内存,让%rsp
指针(x64)指向它.但是 OS 已经为您完成了,因此没有必要。
关于c - 为什么对象 (ELF) 文件中没有堆栈段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48953917/