是否可以保护非固定托管阵列?

时间:2019-07-08 13:58:04

标签: c# memory garbage-collection unmanaged unsafe

我需要保护托管阵列不被写入。我可以通过调用VirtualProtect来做到这一点。但是GC可以执行紧凑型托管内存,并将不固定的数组移动到另一个位置。访问权将被转移,还是GC对它们一无所知?在这种情况下,有没有办法防止非固定托管数组被写入?

更新1: enter image description here

更新2: GC.Alloc无济于事。尝试在内存页面上放置ReadOnly属性会导致GC引发异常。

1 个答案:

答案 0 :(得分:1)

正在工作。

问题在于VirtualProtect阻塞了整个内存页面。托管数组未与页面边框对齐。因此,VirtualProtect会触摸不属于数组的内存。