|
|
1
7
有点安全。
对问题的简要说明: 当我们在堆上分配一些对象时,它们可以被移动到垃圾收集上的另一个位置。所以,想象下一种情况:您已经分配了一些对象和内部数组,它们都被放置在堆的零代中。
所以,我们的目标是将一些对象固定在堆中,这样它们就不会移动。 要实现这一目标,我们必须做些什么?我们有 fixed 声明及 GCHandle.Allocate
首先,什么
汇总:已固定的每个对象
如何检查您的对象不会被移动或垃圾收集:只需消耗堆的所有预算进行零生成,并强制GC压缩堆。换句话说:在堆上创建很多对象。并在固定对象或修复对象后执行此操作。
小提示:有两种类型的堆–大对象堆和小对象堆。如果对象很大,则应该创建大对象来检查代码,否则小对象不会强制GC开始垃圾收集和压缩。 最后,这里是一些示例代码,向任何感兴趣的人演示了使用未固定/未固定指针访问底层数组的危险。
|
|
|
2
4
double[][]是double[]的数组,而不是double*,所以要得到double**,我们首先需要一个double*[]
|
|
|
3
-5
我暂时采用了zachrrs的解决方案(这是我怀疑首先可能需要做的)。这里是一个扩展方法:
|
|
|
aurel_lab · uint8t双指针的分段错误 10 年前 |