首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >建筑结构中的f# NativePtr.stackalloc

建筑结构中的f# NativePtr.stackalloc
EN

Stack Overflow用户
提问于 2016-02-16 04:16:57
回答 1查看 244关注 0票数 3

我正在做一些F#性能测试,并试图在堆栈上创建一个数组,而不是堆(值与引用类型)。我使用NativePtr.stackalloc在堆栈上分配内存。在下面的第一个构造函数中获得一个错误。

代码语言:javascript
复制
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) 

我可以简单地在函数中使用第二种方法,但这确实让我感到困扰,为什么我不能在构造函数中分配内存。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-16 05:22:54

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

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35423640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档