WIn64内存映射文件和锁定页面

Mar*_*ett 3 c++ windows performance 64-bit memory-management

我需要实时获取大量(4-8Gb)数据 - 不丢弃任何数据.

旧系统可以跟上将数据写入条带化RAID阵列,但数据变得更大,速度更快(!)因此我没有时间访问磁盘.
新的计划是切换到Win64,安装LOTS的ram,将传入的数据填入缓冲区,然后在最后写入.

所以我正在寻找:
一个Windows API,它将new []限制为物理内存并将页面锁定为物理内存,或者我只是禁用页面文件.

或者我使用内存映射文件并在关闭文件时强制执行同步.是否有一个内存映射文件标志,在我准备好之前会阻止写入?

zda*_*dan 5

您需要做的是重载operator new并自己分配和锁定该内存.

  1. 调用VirtualAlloc来分配你的内存块.
  2. 调用VirtualLock将这些页面锁定到物理RAM.请注意,有时很难说服Windows执行此操作,但如果您有足够的RAM并且使用SetProcessWorkingSetSize正确设置了进程工作集大小,则通常会有效.请注意特殊的PROCESS_SET_QUOTA权限,您的进程正在运行的用户帐户将需要.