1,可执行文件中有.text,.data,.bss等部分 2,还有程序存储器段(代码,初始化数据,未初始化数据(BSS),堆,堆栈),可以从可执行文件中的部分进行映射。
在每个上面,我可以理解它是什么,当程序加载时段被放置在磁盘中而段被放入内存中。当程序开始运行时,初始化数据,BSS,堆段都被放入数据段,下表描述了更多细节:
此表引自http://www.tenouk.com/ModuleW.html表w.6:
我的问题是内存中地址空间段和程序内存段的区别是什么?
答案 0 :(得分:1)
它们只是在内存中引用相同段的不同方式..
处理这些部分/段的确切方式显然是特定于实现的 - 文件的布局取决于所使用的特定可执行格式和链接器,并且内存中程序的布局再次取决于可执行格式利用和OS加载器。作为一个例子,根据对PE文件格式的讨论 - http://msdn.microsoft.com/en-us/library/ms809762.aspx - 其中一个Borland链接器用于从可执行文件中删除.bss部分,而是将其与.data部分组合 - 我怀疑根据所使用的OS / Linkers / Executable格式的不同风格,有许多类似变量的例子。
答案 1 :(得分:0)
在记忆中没有区别。
但是,通常他们有分开的缓存。此外,在虚拟内存表中,代码段被标记为这样,因此尝试执行非代码段的操作会使程序崩溃。
请注意,这实际上因平台而异。