[使用硬件内存保护在64位硬件上检查数组范围

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[使用硬件内存保护在64位硬件上检查数组范围相关的知识,希望对你有一定的参考价值。

我正在阅读hacks.mozilla.org上的64位Firefox版本的博客。

作者指出:

对于asm.js代码,增加的地址空间还使我们能够使用硬件内存保护来安全地删除asm.js堆访问中的边界检查。收益非常可观:arewefastyet.com上报告的[[asmjs-apps-*-throughput测试结果为8%-17%。

我试图了解64位硬件如何对C / C ++进行自动边界检查(假设编译器具有硬件支持)。我在SO中找不到任何答案。我找到了one technical paper on this subject,但是我不知道该如何完成。

有人可以在边界检查中解释64位硬件帮助吗?

我正在hacks.mozilla.org上阅读有关64位Firefox版本的博客。作者指出:对于asm.js代码,增加的地址空间还使我们可以使用硬件内存保护来安全删除...

答案
[大多数现代CPU实现虚拟寻址/虚拟内存-当程序引用特定地址时,该地址是虚拟地址;到物理页面的映射(如果有)是由CPU的MMU(内存管理单元)实现的。 CPU通过在为当前进程设置的OS的page table中查找每个虚拟地址,将其转换为物理地址。这些查找由TLB缓存,因此大多数时间没有额外的延迟。 (在某些非x86 CPU设计中,TLB丢失由操作系统通过软件处理。)
另一答案
他们使用的技术类似于Windows pageheap调试模式,只是代替了将每个VirtualAlloc()粘贴在其自己的虚拟内存页面中的堆,这是一个将每个数组(基于静态或基于堆栈)粘贴在其中的系统。它自己的虚拟内存页面(更确切地说,它将分配放置在页面的

end

中,因为在数组末尾运行比在数组开始之前尝试访问更为常见)然后,它会在分配的页面之后放置一个无法访问的“保护页面”,在这种情况下甚至是相当数量的页面。

以上是关于[使用硬件内存保护在64位硬件上检查数组范围的主要内容,如果未能解决你的问题,请参考以下文章

如何在ARM / MIPS平台上检查XN / XI位支持的硬件支持

C和内存中的资源保护

Win7 32位和64位有啥区别?装哪个好?

vs2010中配置管理器win32和x64的区别

华为发布AArch64/Arm64 硬件的 Linux 镜像内存支持

LINUX对硬件支持有上限么?最大多少内存?多大硬盘容量