我需要保护托管阵列不被写入。我可以通过调用VirtualProtect来做到这一点。但是GC可以执行紧凑型托管内存,并将不固定的数组移动到另一个位置。访问权将被转移,还是GC对它们一无所知?在这种情况下,有没有办法防止非固定托管数组被写入?
更新2:
GC.Alloc
无济于事。尝试在内存页面上放置ReadOnly属性会导致GC引发异常。
答案 0 :(得分:1)
正在工作。
问题在于VirtualProtect阻塞了整个内存页面。托管数组未与页面边框对齐。因此,VirtualProtect会触摸不属于数组的内存。