1
2
这会有问题的。要理解原因,你必须理解物理内存和虚拟内存之间的关系。 在任何现代操作系统上,程序都会为自己获得一个非常大的地址空间,其余的地址空间将用于操作系统本身。其他程序只是看不见:找不到它们的地址。这怎么可能?简单:进程使用虚拟地址。虚拟地址与物理RAM不直接对应。相反,有一个地址转换表,由操作系统管理。当进程运行时,表只包含分配给您的RAM映射。 现在,这意味着操作系统决定分配给程序的物理RAM。它可以(也会)在runtimke改变这一点。例如,交换是使用相同的机制实现的。交换时,一页RAM被写入磁盘,其映射从转换表中删除。当您尝试使用虚拟地址时,操作系统会检测到丢失的映射,将页面从磁盘还原到RAM,并返回映射。你不太可能回到物理RAM的同一页,但是虚拟地址在整个交换/交换过程中不会改变。所以,即使你碰巧分配了一页坏内存,你也不能保留它。程序不拥有RAM,它们拥有虚拟地址空间。 现在,Linux确实提供了一些特定的内核函数,这些函数以稍微不同的方式分配内存,但似乎您希望完全绕过内核。你可以在 http://lwn.net/images/pdf/LDD3/ch08.pdf |
2
1
退房 BadRAM |
3
0
好吧,这不是如何编写程序的答案,但它解决了编译内核的问题: http://gquigs.blogspot.com/2009/01/bad-memory-howto.html 我会在运行时编辑这个答案并给出详细信息。 |
4
0
问题是编写自己的内核模块,它可以分配物理地址。用mlock做noswap(2)。 |
CaTx · 使用带有一个大于号和两个大于号的回波的区别 2 年前 |
Ari157 · x86_64 Linux程序集中的逻辑与实现 2 年前 |
Ty Q. · 分段故障GLFW3/GLAD 2 年前 |
ShortArrow · 如何使用git管理链接源文件? 2 年前 |
Bastien L. · 多Linux Grafana集成 2 年前 |