c++ - 如何知道指针是否在物理内存中,否则会触发页面错误?

标签 c++ c memory memory-management

如果我有一个指针并且我关心内存访问性能,我可能会检查它的下一个操作是否会触发页面错误。如果可以,可以设计一种算法,以便对循环操作进行重新排序,以最大限度地减少页面错误。

是否有任何可移植(或 linux/windows 不可移植)的方法来检查特定内存地址的访问是否会触发页面错误?

最佳答案

大约十年前,Emery Berger 提出了一种 VM 感知垃圾收集策略,该策略要求应用程序知道哪些页面存在于内存中。出于测试目的,他和他的学生制作了一个内核补丁,该补丁使用实时信号通知分页事件的应用程序,允许垃圾收集器维护自己的常驻页面数据库。 (虽然这看起来像是重复劳动,但它比多次系统调用要高效得多,以便在每次需要时获取信息。)

您可以在他的 research page 上找到有关这项有趣研究的信息。 .

据我所知,最近的 Linux 内核还没有实现这个补丁,但总有可能复活它。

关于c++ - 如何知道指针是否在物理内存中,否则会触发页面错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37764417/

相关文章:

c++ - 嵌套类和对外部类的引用 (c++)

C : conditional memory allocation

bash - 检查每个进程和子进程的内存

android - 什么是Sandboxed_process0,为什么我的应用程序的内存使用量中列出了这么多实例?

c++ - 检查单选按钮

c++ - 如何编写用于使用已知键填充 map 的语义操作?

c++ - 如何在 OpenCV 中创建描述符矩阵

c - 尝试轮询 MSP430 的键盘输入

c - 仅使用 50 年代和 20 年代钞票的 ATM 取款 C

c++ - 保存对象的析构函数地址并在以后调用它是否定义明确的行为?