【发布时间】:2020-03-27 18:02:11
【问题描述】:
我试图找出how Linux stores the stack,甚至C,因为每个进程都可以有自己的堆栈。每个图表都显示了用于管理 非常原始 堆栈(也只有 1 个堆栈)的汇编指令和寄存器,所以我怀疑这就是更高级别的系统是如何做到的(即具有多线程、进程、纤维、工作者、协程、生成器等)。这就是为什么这个问题是关于 v8....
v8(在高层次上,如果有用的话可能会链接到一些相关代码)如何构造堆栈?它是如何构建堆的?还有代码和数据。你总是看到像this这样的图表:
但是 (a) 像 v8 这样的生产 JIT 系统是如何做到的? (b) 关键结构的实际实现是什么?使用了哪些数据结构?堆栈实际上是某种链表吗?或者它是一个数组?堆是否分解为一定大小的块的双向链表?它们是在物理上连续的内存块中分配的(在 v8 中),还是在 Linux 上使用特定于操作系统的系统调用(如 mmap)来分配内存,然后使用某种块架构以自己的方式构建内存(这就是我想知道)?还是仅仅依赖malloc之类的?
基本上,我对模拟生产 JIT 编译器的工作方式很感兴趣,并且停留在内存结构化(使用结构等)的开始部分。我不确定堆栈是否实际上实际上是一个链表,或者其他什么。我很想知道。
我认为这些图表是谎言的原因是因为我们通常在这里处理虚拟内存,物理内存被抽象掉了。即使这样,虚拟内存也被分成小页面,可能分散在各处,我不知道。所以我觉得这些视觉效果是完全不正确和误导的,我想知道它实际上是什么样子的。
【问题讨论】:
-
你看过v8 source或kernel docs,还是kernel source?您似乎对stack vs. heap 感到困惑,我建议您阅读有关threads、call stack 和memory 的内容。
标签: c memory compiler-construction stack v8