Windows和Linux上的内存页写检测
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Windows和Linux上的内存页写检测,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1191字,纯文字阅读大概需要2分钟。
内容图文
我目前正在从事代垃圾收集器的工作.这意味着仅遍历最新的对象,尚存的对象(=从已知根可访问)被提升到较早的一代.当对象指向相同或较早几??代的其他对象时,此方法正常.但是,当较旧的对象指向较新的对象,并且由于仅遍历较新的对象时,指向的对象将被错误地收集.为避免这种情况,将在每个GC阶段中显式标记和遍历此类对象.
显然,这样的“父”对象是可变的,因为通过构造,不可变的对象总是指向现有对象.为了成为“父对象”,必须在升级对象后对其进行修改,以便它指向更新的对象.
为了知道老年人的哪些对象指向年轻人,我正在寻找一种透明监视内存变化的方法.为此,我使用内存保护和信号/异常处理.内存页设置为只读,这会在每次写入时引发信号/异常,在这种情况下,我将内存保护设置回读写状态,并将地址记录在某处以进行进一步处理,并在返回代码时负责对于异常恢复正常.这样,当GC触发时,我知道在哪里寻找可以找到的潜在父母.
在Linux上,我结合使用mprotect / SIGSEGV信号处理.在Windows上,我打算使用VirtualProtect,但没有找到SIGSEGV处理的等效项.所以我的问题是:
>您将如何在Windows上执行此操作?异常处理API似乎很混乱.
>是否有更好的方法来知道要修改哪些存储区,这样我就不必做所有簿记工作了?
我的代码是用纯C语言编写的.目前,我需要调用者代码来显式标记已修改的对象,但这很繁琐且容易出错,因此我正在寻找一种透明的方式来实现.
预先感谢弗雷德
解决方法:
GetWriteWatch为此非常理想.
文档here
内容总结
以上是互联网集市为您收集整理的Windows和Linux上的内存页写检测全部内容,希望文章能够帮你解决Windows和Linux上的内存页写检测所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。