在C# .NET中,为了避免堆分配,stackalloc关键字非常吸引人。但是,我担心使用stackalloc可能会导致stackoverflow异常。为了避免异常,有没有在避免stackoverflow异常的同时使用stackalloc的好方法?我最初想出了以下代码,但我不知道如何获得剩余的堆栈大小。
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];
}
}发布于 2020-05-17 16:03:51
堆栈上可用的内存量是有限的。如果在堆栈上分配了太多内存,则会抛出StackOverflowException。要避免这种情况,请遵循以下规则:
限制使用stackalloc分配的内存量。由于堆栈上可用内存的大小取决于执行代码的环境,因此在定义实际的限制值时要谨慎。
避免在循环中使用stackalloc。在循环外分配内存块,并在循环内重用它。
https://stackoverflow.com/questions/61846437
复制相似问题