我正在做一些F#性能测试,并试图在堆栈上创建一个数组,而不是堆(值与引用类型)。我使用NativePtr.stackalloc在堆栈上分配内存。在下面的第一个构造函数中获得一个错误。
type StackArray<'T when 'T : unmanaged> =
struct
val pointer: nativeptr<'T>
new(x) = { pointer = NativePtr.stackalloc x}
new(pointer) = { pointer = pointer}
end
// This give a System.TypeInitializationException with internal System.InvalidProgramException
let ints2 = new StackArray<int>(10)
// This works fine
let (pointer:nativeptr<int>) = NativePtr.stackalloc 10
let ints = new StackArray<int>(pointer) 我可以简单地在函数中使用第二种方法,但这确实让我感到困扰,为什么我不能在构造函数中分配内存。
发布于 2016-02-16 05:22:54
如果在函数中使用stackalloc进行分配,则一旦返回,就必须释放分配的堆栈空间(否则就没有堆栈)
我原以为在使用对象时会发生错误,但立即出现错误并不完全令人惊讶。
https://stackoverflow.com/questions/35423640
复制相似问题