【发布时间】:2015-07-01 03:21:07
【问题描述】:
在浏览程序的不同部分时,我对谁创建这些部分有些怀疑。 我的理解是汇编程序在创建汇编代码时创建不同的段,当加载到虚拟内存中时,加载程序为所有段创建虚拟地址空间并将它们存储在虚拟内存中。
请帮助我理解它。
【问题讨论】:
-
一般由编译器、汇编器、链接器和操作系统共同完成。但它也很大程度上取决于目标,例如对于没有操作系统或具有小型实时操作系统的嵌入式系统,它可以部分由编译器/汇编器完成,最后由链接器分段。
-
没那么简单。你告诉编译器你的目标和内存模型是什么(即使你只是接受默认值)。然后,您的编译器会创建符合在给定目标和内存模型中编译的程序类型的段。默认情况下,你一般会得到一个数据段、rodata段、bss段、代码段、堆栈段,你还会得到额外的内存段f&g。限制是预定义的。如果你用大内存模型改变你的编译目标,那也会改变。
标签: linux memory-management assembly