我创建了一个无法通过GC收集的内存分配库。 (https://github.com/10sa/Unmanaged-Memory)
此库分配的堆区域基本上是通过使用WinAPI GetProcessHeap()函数获得的。您还可以创建堆区域并将其分配给它。但是,用于创建堆区域的函数是HeapCreate函数。
问题是,
1。此内存区域(GetProcessHeap())是否由GC管理?
2。如果使用HeapCreate函数创建新的堆区域,GC是否可以收集生成的堆区域?
第3。如果上述所有问题都成立,如何在不使用全局堆的情况下在C#中创建未收集的内存区域?
答案 0 :(得分:6)
你想在这做什么?已经有大量的内置机制可以通过CLR分配非托管内存而无需外部工具。
此外,在示例中:在非托管内存中分配4个字节非常非常昂贵且不必要。通常当我们谈论非托管内存时,我们谈论的是内存的 slabs - 然后我们通过巧妙的代码对内部进行细分和内部分区。