我需要实时获取大量(4-8Gb)数据 - 不会丢失任何数据。
旧系统可能只是跟上将数据写入条带化RAID阵列,但数据变得更大,速度更快(!)因此我没有时间访问磁盘。登记/> 新的计划是切换到Win64,安装LOTS ram,将传入的数据填入缓冲区,然后在最后写入。
所以我在寻找:
一个Windows API,它将new []限制为物理内存并将页面锁定为物理ram,或者我只是禁用页面文件。
或者我使用内存映射文件并在关闭文件时强制执行同步。是否存在一个内存映射文件标志,在我准备好之前会阻止写入?
答案 0 :(得分:5)
您需要做的是重载operator new并自行分配和锁定该内存。
答案 1 :(得分:1)
您可以使用VirtualAlloc
参数调用VirtualAlloc,而不是使用普通的旧MEM_LARGE_PAGES
并自行锁定页面。您需要事先设置一些设置:See here
默认情况下,大页面不可分页,显然开销更高效。请注意,大型页面的分配时间可能会在碎片堆上出现问题。您可能还想阅读this。
答案 2 :(得分:0)
一种快速方法是禁用系统分页文件系统。您可以为数据创建一个特殊的堆,它只使用物理内存,但是用于处理小块数据的内存管理的新/删除内容通常使用进程堆。使用win api中的HeapCreate()函数。现在你必须得到new / delete才能使用那个堆。