远离Windows\C++中的虚拟内存

Vik*_*ehr 1 c++ memory windows winapi swap

我正在编写一个性能关键型应用程序,它必须在转储到光盘之前将尽可能多的数据存储在物理内存中.

我可以使用::GlobalMemoryStatusEx(...)::GetProcessMemoryInfo(...)找出保留的物理内存百分比\ free以及当前进程处理的内存量.使用这些数据,我可以确保在使用~90%的物理内存时进行转储,或者每个应用程序限制最多2GB的约90.

但是,我想要一种方法来简单地接收在系统开始使用虚拟内存之前实际剩下多少字节,特别是当应用程序将被编译为32位和64位时,而2 GB限制不存在.

And*_*nck 6

这个功能怎么样:

int
bytesLeftUntilVMUsed() {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它应该在我认为的几乎所有情况下给出正确的结果;)

  • :-)让我好无辜. (2认同)

Ski*_*izz 5

想象一下,在256Mb的RAM中运行Windows 7(MS建议至少1GB).这实际上就是你要求用户想要重新获得90%的可用RAM.

真正的问题是:你为什么需要这么多内存?什么是"性能关键"标准?

通常,这类问题意味着您的设计存在严重错误.

更新:

使用范围顶部RAM(DDR3)可以提供12GB/s的理论传输速度,相当于每个时钟周期读取一个32位值,并留有一些带宽.我很确定不可能对以这种速度进入CPU的数据做任何有用的事情 - 指令处理停顿会中断这个流程.额外的,未充分的带宽可用于向/从硬盘寻呼数据.使用RAID,这种传输速率可能非常高(约为RAM带宽的1/16).因此,将数据传输到磁盘或从磁盘传输数据是可行的,而不会降低性能 - 读取之间只需要16个循环(好吧,我的数学可能有点不对劲).

但是如果你把Windows扔进混合体中,那一切都会变成底池.你的记忆随时都可以消失,你的应用程序可以随意暂停,等等.将存储器锁定到RAM会对整个系统产生不利影响,从而破坏了定位存储器的目的.

如果你解释一下你想要实现的目标以及性能评论,那么这里有很多人会帮助开发一个合适的解决方案,因为如果你不得不询问系统限制,那么你确实做错了什么.