gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:33:46 25 4
gpt4 key购买 nike

我正在进行一些 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)

我可以简单地在函数中使用第二种方法,但是为什么我无法在构造函数内分配内存,这真的很困扰我。

最佳答案

如果您在函数中使用 stackalloc 进行分配,一旦返回,分配的堆栈空间必须被释放(否则您将没有堆栈)

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

关于struct - 结构构造函数中的 f# NativePtr.stackalloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35423640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com