HeapAlloc,HeapCreate在C#中是垃圾收集的

时间:2018-03-15 10:24:06

标签: c# winapi memory-management heap heap-memory

我创建了一个无法通过GC收集的内存分配库。 (https://github.com/10sa/Unmanaged-Memory

此库分配的堆区域基本上是通过使用WinAPI GetProcessHeap()函数获得的。您还可以创建堆区域并将其分配给它。但是,用于创建堆区域的函数是HeapCreate函数。

问题是,

1。此内存区域(GetProcessHeap())是否由GC管理?

2。如果使用HeapCreate函数创建新的堆区域,GC是否可以收集生成的堆区域?

第3。如果上述所有问题都成立,如何在不使用全局堆的情况下在C#中创建未收集的内存区域?

1 个答案:

答案 0 :(得分:6)

  1. 无;线索在名称(“非托管内存”)中,并且它由操作系统分配,而不是CLR
  2. 没有<!/ LI>
  3. N / A
  4. 你想在这做什么?已经有大量的内置机制可以通过CLR分配非托管内存而无需外部工具。

    此外,在示例中:在非托管内存中分配4个字节非常非常昂贵且不必要。通常当我们谈论非托管内存时,我们谈论的是内存的 slabs - 然后我们通过巧妙的代码对内部进行细分和内部分区。