- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
以下代码是否会将文件中的数据加载到系统内存中,以便访问结果指针永远不会阻塞线程?
auto ptr = VirtualLock(MapViewOfFile(file_map, FILE_MAP_READ, high, low, size), size); // Map file to memory and wait for DMA transfer to finish.
int val0 = reinterpret_cast<int*>(ptr)[0]; // Will not block thread?
int val1 = reinterpret_cast<int*>(ptr)[size-4]; // Will not block thread?
VirtualUnlock(ptr);
UnmapViewOfFile(ptr);
编辑:
在 Dammons 回答后更新。
auto ptr = MapViewOfFile(file_map, FILE_MAP_READ, high, low, size);
#pragma optimize("", off)
char dummy;
for(int n = 0; n < size; n += 4096)
dummy = reinterpret_cast<char*>(ptr)[n];
#pragma optimize("", on)
int val0 = reinterpret_cast<int*>(ptr)[0]; // Will not block thread?
int val1 = reinterpret_cast<int*>(ptr)[size-4]; // Will not block thread?
UnmapViewOfFile(ptr);
最佳答案
如果文件的大小小于小得离谱的最大工作集大小(或者,如果您相应地修改了工作集大小)那么理论上是的。如果超过最大工作集大小,VirtualLock
将什么都不做(即失败)。
(在实践中,我看到 VirtualLock
相当......自由......在解释它应该做什么而不是它实际做什么时,至少在 Windows XP 下 -在更现代的版本下可能会有所不同)
我过去一直在尝试类似的事情,现在我只是用一个简单的 for
循环(读取一个字节)来访问 RAM 中我想要的所有页面。这不会留下任何悬而未决的问题并且可以工作,唯一可能的异常(exception)是页面 可能 理论上在触摸后再次换出。实际上,这永远不会发生(除非机器的 RAM 真的很低,然后发生这种情况就可以了)。
关于c++ - MapViewOfFile 和 VirtualLock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11968898/
为了安全起见,我目前正在研究如何避免在程序执行期间交换某些数据 block 。 就我的搜索而言,我在 Linux 上找到了 mlock,这似乎正是我需要的工具,在 Windows 上找到了 Virtu
我在重写相当陈旧的 C++ 代码时偶然发现了内存管理部分。 更具体地说,“需要”的内存首先以类似于的方式分配 int* Buffer; int numPoints=80000; Buffer = (i
以下代码是否会将文件中的数据加载到系统内存中,以便访问结果指针永远不会阻塞线程? auto ptr = VirtualLock(MapViewOfFile(file_map, FILE_MAP_REA
如何将对象保存在内存中,使其不会被 .Net 中的操作系统调出页面? 即类似于 VirtualLock 的东西,但是在一个对象上操作,这样如果压缩发生并且对象被移动它仍然不会被分页等等。(我想可以固定
今天早上,我偶然发现了数量惊人的页面错误,这些都是我没想到的。是的,我可能不必担心,但这仍然让我感到奇怪,因为据我所知,它们不应该发生。而且,如果他们没有,我希望更好。 该应用程序(在WinXP Pr
我是一名优秀的程序员,十分优秀!