- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
嗯。我对虚拟地址空间
中使用的内存映射文件
的概念非常困惑。
在下面的链接中,我已经用谷歌搜索了。
http://en.wikipedia.org/wiki/Virtual_address_space
我找到了一个部分
Then the application's executable file is mapped into the Virtual Address Space.
Addresses in the process VAS are mapped to bytes in the exe file.
The OS manages the mapping:
0 4GB
VAS |---vvvvvvv------------------------------------|
mapping |-----|
file bytes app.exe
The v's are values from bytes in the mapped file.
现在这个内存映射文件与特定虚拟地址空间中的特定进程有什么关系(在上一节的最后一条语句中混淆)?
为什么明确需要包含用于创建对应于特定进程的内存映射文件的代码?
最佳答案
您首先需要了解的是物理地址和虚拟地址之间的区别。当您的程序将数据写入特定(虚拟)内存地址时,您写入的地址会转换为 RAM 芯片上的实际地址。如果没有为特定虚拟地址编程物理地址,您通常会遇到访问冲突或段错误。
它的工作方式是内存管理单元 (MMU) 生成 CPU 异常,导致执行跳转到内核故障处理程序。在访问冲突的情况下,您的进程将终止。
内核能够做一些其他聪明的事情。如果您的进程空闲,它可能会将您的进程使用的一些物理内存复制到交换文件中(并从 mmu 中删除条目),当您访问上述地址时,CPU 异常不会中止您的程序。相反,内核将首先暂停您的进程。然后它将数据从交换文件复制回内存,重新编程 MMU。然后内核将恢复您的进程,并且该进程将访问内存,就好像它一直在那里一样。就过程而言,没有发生什么特别的事情。此过程称为请求寻呼。
当您mmap
一个文件时,内核会有效地执行请求分页,但是从您读取指定的文件而不是从交换文件。这个过程是完全一样的。 CPU 访问异常将导致文件中的数据被读入 RAM,您可以将其作为普通内存访问。当您关闭文件时,内存将被写回到释放的文件中。最大的优势是您可以通过指针使用文件中的数据。
希望对你有帮助
关于c++ - 在虚拟地址空间中使用内存映射文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19302039/
运行 Tomcat 失败并出现 java.lang.OutOfMemoryError - 与缺少 PermGen 空间相关的错误。 我最近将 Tomcat 更改为以自己的用户(而非 root)运行。
我们有一个表,其中包含数百万行,其中包含 PostGIS 几何图形。我们要执行的查询是:落在边界几何内的最新条目是什么?这个查询的问题是我们经常会有大量的项目匹配边界框(半径大约为 5 公里),然后
我有一个Elasticsearch设置,它将允许用户搜索通配符作为索引。 array:3 [ "index" => "users" "type" => "user" "body" => arra
我创建了一个表,其中每行包含两个按钮,并且两个按钮连接在一起,我想将两个按钮分开。我用过 不起作用,css 也是,这是他们的另一种方式。 我有另一个问题,因为我不想在表格边框内显示操作按钮,而是在靠近
我试图在 jQuery Mobile 中的两个按钮之间留出空白。现实中的布局是这样的: Button 1 Button 2 (Hidden w/ display: none)
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
您好,我对图表应用程序还很陌生。现在我为我的应用程序创建了条形图。当我运行 create bar chart as separate project 时,输出如下所示。 然后当我将条形图与我的应用程序
我在使用 H2 和 GeoDB(内存中,junit)时遇到问题。 另外,使用 Hibernate 5(每个包的最新版本,包括 hibernate-spatial)和 Spring 4。 通过 id 实
我想画一张澳大利亚的 map ,并将每个城市表示为一个点。 然后突出显示人口众多(> 1M)的城市 library(sp) library(maps) data(canada.cities) head
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 提供事实和引用来回答它. 6年前关闭。 Improve this
如何保持.txt文件中存在的空格?在.txt文件中,它表示: text :text text1 :text1 text23 :text2 text345 :text3 如果我写这段
以下哪个键最大? 选项 1:16 个数字 [0,9] 选项 2:30 个元音 选项 3:字母表中的 16 个字母 选项 4:32 位 有人可以帮助我,告诉我哪一个是正确的答案以及我们如何计算它吗?我知
在 Unity 3d 中使用 Azure 空间 anchor 来实现在 iOS 和 Android 上部署的室内和室外增强现实体验是否有益? 最佳答案 是的,对于 Azure Spatial Anch
我有一个绝对定位的圆形图像。图像只需占据屏幕宽度的 17%,并且距离顶部 5 个像素。 问题是,当我调整图像大小以占据屏幕宽度的 17% 时,它会这样做,但同时容器会变长。图像本身不会拉伸(stret
我在 Ubuntu 14.04 上使用 Cassandra。从文档中,我可以看到运行命令: nodetool snapshot 创建我的 key 空间的快照。 命令的输出是: nodetool sn
Heroku引入了“私有(private)空间”,是否可以将现有应用迁移到私有(private)空间? https://blog.heroku.com/archives/2015/9/10/herok
是否允许在语义记录中使用非绑定(bind)空格 或其他 HTML 编码字符?我遇到的问题是 ; 字符被软件视为记录的结尾。 例如:假设我有一份婚姻记录,其中包含 2 个结婚者的姓氏、结婚年份以及结
我正在研究“智能 parking ”项目,偶然发现了包含我们真正需要的YouTube视频。我们已经实现了第一部分,即从视频源进行实时透视变换,下一步是将其定义为一组矩形 我基本上需要知道他是如何做到的
我有两个类:Engine 和 Trainset(多个单元),这两个类共享其 ID 空间,其中包含名称和系列 id=- . 这是我的Engine类(它是抽象的,因为有引擎的子类型(DieselEngin
如果有人能帮助我,那就太好了。 我正在尝试使用Java的Split命令,使用空格分割字符串,但问题是,字符串可能没有空格,这意味着它将只是一个简单的顺序(而不是“输入2”将是“退出”) Scanner
我是一名优秀的程序员,十分优秀!