首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >虚拟内存

虚拟内存
EN

Stack Overflow用户
提问于 2009-02-04 08:41:24
回答 5查看 2K关注 0票数 5

大多数关于虚拟内存的文献指出,作为一名应用程序开发人员,了解虚拟内存可以帮助我利用其强大的功能。我在Linux上开发应用程序已经有一段时间了,但我在编写代码时并不关心虚拟内存的复杂性。我是不是遗漏了什么?如果是这样,请说明我如何利用虚拟内存的工作方式。否则,如果我的问题没有意义,请让我知道!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-02-04 08:51:53

实际上,这个概念非常简单。我不会在这里重复,但你应该拿起任何关于操作系统设计的书,它将在那里解释。我推荐来自Silberscahtz和Galvin的"Operating System Concepts“--这是我在大学里不得不用的,它很不错。

我能想到的虚拟内存知识可能会带给你一些东西:

  • 学习在页面边界上分配内存,以避免浪费(仅适用于虚拟内存,不适用于通常的堆/堆栈内存);
  • 锁定内存中的一些页面,以便它们不会被交换到硬盘;
  • 守护程序保护某些地址范围,并在以后提交实际内存;
  • 可能使用NX (不可执行)位来提高安全性,但我不确定这一点。

<代码>H111在32位系统上访问>4 4GB的PAE。<代码>H212<代码>F213

尽管如此,所有这些东西只有在非常特定的场景中才有用处。事实上,99%的应用程序不需要关心这一点。

补充道:说,知道所有这些事情绝对是件好事,这样当它们出现时,你就可以识别出它们。当心--有权力就有责任。

票数 4
EN

Stack Overflow用户

发布于 2009-02-04 08:51:58

这是一个有点模糊的问题。

使用虚拟内存的方式,主要是通过使用内存映射文件。有关详细信息,请参阅mmap()手册页。

不过,您可能会隐式地使用它,因为任何动态库都是作为映射文件实现的,而且许多数据库库也使用它们。

使用来自高级语言的映射文件的接口通常非常不方便,这使得它们不太有用。

使用映射文件的主要好处是:

  • 访问文件的各个部分时没有系统调用开销(这实际上可能是一个缺点,因为如果发生页错误,则可能会有同样多的开销)
  • 不需要将数据从操作系统缓冲区复制到应用程序缓冲区-这可以提高performance
  • Ability,以便在进程之间共享内存。

一些缺点是:

  • 32位计算机可能会耗尽地址空间easily
  • Tricky以正确处理文件扩展
  • 没有简单的方法来查看当前驻留了多少页(但是,可能有一些方法)
  • 不适合实时应用程序,因为页错误可能会导致IO请求,从而阻塞线程(但是,文件可以锁定在内存中,但仅当有足够的内存时)。
票数 2
EN

Stack Overflow用户

发布于 2009-02-04 08:45:03

对于当今的大多数应用程序,程序员可以保持不知道计算机内存的工作方式,而不会造成任何危害。但有时--例如,当您想要改进程序的内存占用时--您最终必须自己操作内存。在这种情况下,了解内存是如何工作的是至关重要的。

换句话说,尽管你确实可以在没有虚拟内存的情况下生存,但学习虚拟内存只会让你成为一名更好的程序员。

我认为Wikipedia article可以是一个很好的开始。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/510544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档