Has anyone ever actually used stackalloc
while programming in C#? I am aware of what is does, but the only time it shows up in my code is by accident, because Intellisense suggests it when I start typing static
, for example.
Although it is not related to the usage scenarios of stackalloc
, I actually do a considerable amount of legacy interop in my apps, so every now and then I could resort to using unsafe
code. But nevertheless I usually find ways to avoid unsafe
completely.
And since stack size for a single thread in .Net is ~1Mb (correct me if I'm wrong), I am even more reserved from using stackalloc
.
Are there some practical cases where one could say: "this is exactly the right amount of data and processing for me to go unsafe and use stackalloc
"?
The sole reason to use stackalloc
is performance (either for computations or interop). By using stackalloc
instead of a heap allocated array, you create less GC pressure (the GC needs to run less), you don't need to pin the arrays down, it's faster to allocate than a heap array, an it is automatically freed on method exit (heap allocated arrays are only deallocated when GC runs). Also by using stackalloc
instead of a native allocator (like malloc or the .Net equivalent) you also gain speed and automatic deallocation on scope exit.
Performance wise, if you use stackalloc
you greatly increase the chance of cache hits on the CPU due to the locality of data.