如果我有一个指针并且我关心内存访问性能,我可能会检查它的下一个操作是否会触发页面错误。如果可以,可以设计一种算法,以便对循环操作进行重新排序,以最大限度地减少页面错误。
是否有任何可移植(或 linux/windows 不可移植)的方法来检查特定内存地址的访问是否会触发页面错误?
最佳答案
大约十年前,Emery Berger 提出了一种 VM 感知垃圾收集策略,该策略要求应用程序知道哪些页面存在于内存中。出于测试目的,他和他的学生制作了一个内核补丁,该补丁使用实时信号通知分页事件的应用程序,允许垃圾收集器维护自己的常驻页面数据库。 (虽然这看起来像是重复劳动,但它比多次系统调用要高效得多,以便在每次需要时获取信息。)
您可以在他的 research page 上找到有关这项有趣研究的信息。 .
据我所知,最近的 Linux 内核还没有实现这个补丁,但总有可能复活它。
关于c++ - 如何知道指针是否在物理内存中,否则会触发页面错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37764417/