堆栈,数据和指令段在哪里实施?

所以在x86-64中放弃了内存分割,但是当我们使用assembly时,我们可以在代码中指定.code和.data节/段,并且还有堆栈指针寄存器。

以及堆栈段,数据段和代码段寄存器。

代码/数据/堆栈的划分如何以及在哪里发生,是由CPU还是OS实现的?

因为当我们调试并查看某个C程序的反汇编视图时,地址空间是线性的,没有分区。

当他们说数据段对全局,静态和堆有“部分”时,这是操作系统抽象?


您需要使用不同的模型来考虑内存使用情况。 使用具有以下属性的程序部分考虑内存:

  • 代码:可执行,可读,不写
  • 静态数据:不可执行,可读,nowrite
  • 可修改数据:不可执行,可读,可写(您也可以添加Demand-zero区域)
  • 这些属性可以在页面级别进行设置。 在一个系统中,你可以将页面交错

    代码数据代码数据代码数据

    通常情况下,链接器会将类似的部分放在一起,但它几乎可以用任何分页方式来布局内存。 通常的机制是,如果您给部分提供名称,连接器将一起收集和分组同一部分的内容。

    您不受Ye Olde 8086分割系统的限制。

    然后这些部分由操作系统和链接器管理。

    链接地址: http://www.djcxy.com/p/14453.html

    上一篇: Where are the stack, data and instruction segments implemented?

    下一篇: heap vs data segment vs stack allocation