我们什么时候应该在.NET中使用NativeMemory.Alloc()?

shu*_*ch5 5 c# .net-6.0

.NET6/C#引入了NativeMemory类,但是我不知道什么时候应该使用NativeMemory.Alloc()普通的数组实例化(new T[])。我的问题是:

  1. 内存中的哪个区域NativeMemory.Alloc()填充对象?该方法是否填充托管堆中的对象?

  2. 什么样的情况应该使用NativeMemory.Alloc()new T[]

参考: https://learn.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.nativememory ?view=net-6.0

小智 6

看起来它是“C mallocAPI 的薄包装器”。因此,如果我没记错的话,它将在非托管堆上分配内存。

至于第二个问题,我真的想不出任何特定的场景(除了一些边缘情况)在.NET中有用(尽管我确信它们存在),而人们还没有使用C /C++。除此之外,我想人们会在速度绝对至关重要的情况下使用它(例如渲染)。

它刚刚被添加,以便我们可以选择使用 C/C++ 之类的内存管理。

  • 它的一个非常好的方面是有一个 AlignedAlloc() 版本。对于需要尽可能多的性能的情况,对齐内存中的数据会有所帮助。我最近使用它为使用 SIMD 的方法分配数据,它每次迭代都在四个 256 位寄存器上工作。将数据与缓存行大小对齐会对性能产生影响。 (2认同)