【发布时间】:2016-10-26 08:00:09
【问题描述】:
我正在尝试调和一些概念。
我知道虚拟内存在内核和所有用户进程之间共享(映射),我读过here。我还知道,当编译器为代码+数据生成地址时,内核必须将它们加载到该进程的正确虚拟地址。
为了限制问题的范围,当我提到“编译器”时,我只是指 gcc。 那么编译器是否需要兼容操作系统的每个新版本,才能知道不要将代码或数据放在为内核保留的高内存地址?例如,编写该编译器的人必须知道内核计划如何加载程序的那些细节(以免编译器将可执行代码放在高内存中)?
还是我混淆了不同的概念?在查看this tutorial 时,我有点困惑,尤其是在最底层,它的 OS 代码位于低内存地址,因为我认为 Linux 将高内存用于内核。
【问题讨论】:
标签: c gcc memory linux-kernel