c - 为什么对象 (ELF) 文件中没有堆栈段?

标签 c operating-system elf

我是操作系统的初学者。这个问题是我的教授提出的,让我很困惑。我希望我能在这里得到一些提示和帮助。

在我的内存中,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/

相关文章:

linux - 解析用户代理操作系统版本为空?

gcc - 64 位平台上的 ELF 目标文件大小限制是多少?

x86 - ELF 或二进制文件中有特定 ABI 的签名吗?

c - 如何在 while 循环中的嵌套 for 循环上使用 OpenMP?

linux - 中断向量中是否有系统调用服务程序?

linux - 有哪些有趣的小型 Linux 内核项目可以帮助学习源代码?

gcc - red hat devtoolset-3 中的 g++ 找不到 -lelf

c++ - 检查互联网连接或不断检查互联网连接

c - 我是否需要在我的 C/C++ 源代码中#include <omp.h>?

c - 在 ARM C 调用约定中要保存哪些寄存器?