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

时间:2015-01-17 23:52:36

标签: c memory assembly

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

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

代码/数据/堆栈的划分方式和位置是由CPU还是OS实现的?

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

当他们说数据段有"部分"对于全局,静态和堆,这是OS抽象吗?

1 个答案:

答案 0 :(得分:0)

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

  • 代码:可执行,可读,无需写入
  • 静态数据:不可执行,可读,nowrite
  • 可修改数据:不可执行,可读,可写 (您可能还会添加需求零区域)

可以在页面级别设置这些属性。在系统中,您可以将页面交错

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

通常情况下,链接器会将类似的部分放在一起,但它可以通过分页以几乎任何方式布置内存。通常的机制是,如果您为部分命名,链接器将收集和分组相同部分的内容。

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

然后,部件由操作系统和链接器控制。