【发布时间】:2014-10-23 16:51:01
【问题描述】:
这是一个半理论的问题。
在为 Windows(例如 MSVS12 C++)和 Linux(例如 g++)进行编译时,我可以指定内存的虚拟化模式(纯分段/分段+分页/仅分页)吗?
我已经阅读了所有 MSVS 链接器+编译器选项,但没有找到任何控制点。
对于 g++,manual 对于这样的问题来说太复杂了。
这个问题的来源是这个-link
我从理论和实践中知道,这些应该是可能的,或者在某种程度上受到操作系统策略的限制,因为核心 i7 支持我上面提到的所有三种模式。
实践背景:
创建大量数据的代码是 here,函数 Init - 如果我想在堆上拥有超过 2-3G 的素数,它会耗尽我的内存。
【问题讨论】:
-
如果我正确理解您的问题,这些东西是在引导加载期间设置的系统范围内,没有任何现代内核将在没有分页以允许用户空间、访问控制和分页的情况下运行。
-
如果我正确理解您的评论,win7 和例如 ubuntu14.04 在引导加载系统范围内设置它们的分页/分段选项?如果是这样,默认值是什么(如果用户没有修改操作系统的这些方面)?据我了解,在win7程序中堆是其中的一部分。是否分页取决于什么?
-
我很确定如果没有分页提供的精细控制,Windows 或 linux 都无法运行。即使交换被禁用,两者都使用分页进行访问控制。
-
@Linuxios,谢谢。我读过这个理论上的 Tanenbaum 的“S.C.O.”书,它在应用程序上相当模糊。我想,这三种模式在实践中并没有明确的界限,其中一些仅用于遗留代码执行。
标签: linux windows memory virtualization