Struct 结构构造函数中的f#NativePtr.stackalloc

Struct 结构构造函数中的f#NativePtr.stackalloc,struct,f#,unmanaged-memory,Struct,F#,Unmanaged Memory,我正在做一些F#性能测试,并试图在堆栈而不是堆上创建一个数组(值与引用类型)。我正在使用NativePtr.stackalloc在堆栈上分配内存。在下面的第一个构造函数中获取错误 type StackArray<'T when 'T : unmanaged> = struct val pointer: nativeptr<'T> new(x) = { pointer = NativePtr.stackalloc x}

我正在做一些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) 
类型堆栈数组=
结构

val pointer:nativeptr如果在函数中使用stackalloc进行分配,则一旦返回,就必须释放分配的堆栈空间(否则就不会有堆栈)


我本以为该错误会在以后使用该对象时发生,但立即出现错误并不完全令人惊讶

谢谢。那么构造函数只是另一个函数,在使用struct的代码上方有自己的堆栈空间(返回后将被释放)?有趣的是,我尝试将第二个方法放在函数中,但它没有爆炸——尽管我猜一旦我尝试使用指针,它会爆炸。