The stackalloc operator allocates a memory block in the stack. A memory block is created during the execution of the method, and it is automatically deleted when the method is returned.
Span<T>, ReadOnlySpan<T>, and Memory<T> are ref struct instances guaranteed to be allocated on the stack, and therefore won't affect the garbage collector.Span, it was also possible to avoid declaring the stackalloc statements that are directly assigned to Span or ReadOnlySpan as unsafe.In C# 8.0, if the result of a stackalloc expression is Span<T> or ReadOnlySpan<T>, you can use the stackalloc expression in other expressions as shown in the below example.
Span<int> numbers = stackalloc[] { 1, 2, 3, 4, 5, 6 };
var index = numbers.IndexOfAny(stackalloc[] { 4, 8, 12 });
Console.WriteLine(index); // output: 3
As you can see the nested stackalloc in the above code. Let's consider another example simple example.
string input = "This is a simple string \r\n";
ReadOnlySpan<char> trimmedChar = input.AsSpan().Trim(stackalloc[] { ' ', '\r', '\n' });
Console.WriteLine(trimmedChar.ToString());
In the above example, it trims the input string from three special characters.