首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免堆栈溢出异常时使用stackalloc的任何方法

避免堆栈溢出异常时使用stackalloc的任何方法
EN

Stack Overflow用户
提问于 2020-05-17 11:00:39
回答 1查看 122关注 0票数 0

在C# .NET中,为了避免堆分配,stackalloc关键字非常吸引人。但是,我担心使用stackalloc可能会导致stackoverflow异常。为了避免异常,有没有在避免stackoverflow异常的同时使用stackalloc的好方法?我最初想出了以下代码,但我不知道如何获得剩余的堆栈大小。

代码语言:javascript
复制
void Main()
{
    var remainingStackSize = //Get remaining stacksize somehow.

    var arraySize = 100;
    if (remainingStackSize > sizeof(byte) * arraySize) 
    {
        Span<byte> numbers = stackalloc byte[arraySize];
    }
    else 
    {
        Span<byte> numbers = new byte[arraySize];
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-05-17 16:03:51

documentation

堆栈上可用的内存量是有限的。如果在堆栈上分配了太多内存,则会抛出StackOverflowException。要避免这种情况,请遵循以下规则:

限制使用stackalloc分配的内存量。由于堆栈上可用内存的大小取决于执行代码的环境,因此在定义实际的限制值时要谨慎。

避免在循环中使用stackalloc。在循环外分配内存块,并在循环内重用它。

另请参阅How much stack usage is too much?

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

https://stackoverflow.com/questions/61846437

复制
相关文章

相似问题

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