所以在 x86-64 中放弃了内存分段,但是当我们使用汇编时,我们可以在代码中指定 .code 和 .data 节/段,并且还有堆栈指针寄存器。
以及堆栈段、数据段和代码段寄存器。
代码/数据/堆栈的划分是如何以及在哪里发生的,它是由 CPU 还是操作系统实现的?
因为当我们调试并看到一些C程序的反汇编视图时,地址空间是线性的,没有除法。
当他们说数据段有全局、静态和堆的“部分”时,这是操作系统抽象吗?
所以在 x86-64 中放弃了内存分段,但是当我们使用汇编时,我们可以在代码中指定 .code 和 .data 节/段,并且还有堆栈指针寄存器。
以及堆栈段、数据段和代码段寄存器。
代码/数据/堆栈的划分是如何以及在哪里发生的,它是由 CPU 还是操作系统实现的?
因为当我们调试并看到一些C程序的反汇编视图时,地址空间是线性的,没有除法。
当他们说数据段有全局、静态和堆的“部分”时,这是操作系统抽象吗?
您需要使用不同的模型来考虑内存使用情况。考虑使用具有以下属性的程序部分的内存:
这些属性可以在页面级别设置。在一个系统中,你可以让页面交错
代码-数据-代码-数据-代码-数据
通常,链接器会将相似的部分放在一起,但它几乎可以通过分页以任何方式布置内存。通常的机制是,如果您为节命名,链接器将收集同一节的内容并将其组合在一起。
你不受 Ye Olde 8086 分割系统的限制。
然后这些部分由操作系统和链接器管理。