C#应用程序中的堆栈溢出

use*_*153 4 c# memory stack-overflow

我是编程中内存划分概念的新手.我发现堆栈的大小在大多数情况下是在.NET应用程序1MB轮.我的问题是:"如果在某些函数中我使用局部变量为大于1MB的"Image"类型,如何不出现堆栈溢出.提前感谢.

Mik*_*oud 7

因为StackOverflow异常与堆栈或堆内存管理无关.根据MSDN文档:

执行堆栈溢出时抛出的异常,因为它包含太多嵌套方法调用.这个类不能被继承.

现在,如果你在谈论关于stack记忆的话,那么我们处在一个不同的世界.您存储在内存中的图像可能保存在大对象堆上.内存管理及其对话对于本论坛而言过于宽泛 - 但如果您对内存管理有一个特定的问题,那么我们就可以解决这个问题.

重要的是要了解您在问题中混合了两个命名法和概念,并且两者之间存在明显的差异.我不希望你继续认为你应该StackOverflow因为大对象而得到异常.我不想你去,你的思维得到一个StackOverflow,因为大对象和内存管理的除外.


Fra*_*len 6

图像本身不存储在堆栈中,它存储在堆上.只有指向图像的指针/引用保留在堆栈上,这个指针/引用要小得多.

public static void DoSomethingToImage()
{
    Image img = new Image(...);
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码片段中,Image在堆上分配,对映像的引用存储在img堆栈中的变量中.