【发布时间】:2016-04-05 04:46:31
【问题描述】:
我最近试图想象堆栈内存在 Linux 内核中可能是如何处理的,但我想不出任何可靠的东西。我知道内核使用自己的函数进行动态内存管理,但我不知道它是如何管理普通 C 堆栈内存的,因为毕竟可以用普通 C 实现并用普通 GCC 编译。据我所知,在处理操作系统甚至像 AVR 之类的东西时,堆栈内存分配通常由一种 libc 形式处理。据我所知,虽然 Linux 内核不依赖于 libc?
我不完全确定堆栈内存管理首先是如何委托给 libc 的,因为它似乎是一种内置的语言功能。我所能想象的只是它以某种方式被通用编译(或实现),因此可以在之后或可能作为编译过程的一部分分配提供者。有人可以帮我解释一下吗?
【问题讨论】:
-
当一个新进程启动时,它有一个映射到进程地址空间的用户空间堆栈和一个内核堆栈,供它进行系统调用时使用。堆栈指针开始指向堆栈。 libc 根本不参与。发布的答案有些令人困惑,但 ELF 二进制文件能够控制它们获得的堆栈设置似乎是正确的:stackoverflow.com/questions/18278803/…。默认是没有这样的section,然后在内核默认选择的virt地址处得到一个默认栈。
标签: c linux memory-management linux-kernel