Stackalloc. This operator allocates memory in an unsafe context (so it should be used with caution). It is similar to the alloca function from the C language.
Stackalloc implements a form of malloc that frees the memory when the calling function returns. With it we create buffers for usage with external code or string constructors.
An example. This program uses an unsafe method context—to compile it you must enable unsafe code to be used. It shows the stackalloc operator for allocating memory on the stack.
Note Stackalloc is similar to the alloca function in C, which is a form of malloc that frees its memory automatically.
Info Stackalloc creates a buffer of 51 chars (102 bytes). The memory is initialized to the values "az" and the null char.
Finally The program returns a string type that was created through the constructor. The string resides on the managed heap.
using System;
class Program
{
unsafe static string GetStringStackalloc()
{
// Allocate a character buffer with the stackalloc operator.// ... Assign the memory to specific letters.// ... Add the terminal character.
char* buffer = stackalloc char[50 + 1];
for (int i = 0; i < 10; i++)
{
buffer[i] = 'a';
}
for (int i = 10; i < 50; i++)
{
buffer[i] = 'z';
}
buffer[50] = '\0';
return new string(buffer);
}
static void Main()
{
// Call the stackalloc method to get the result string.// ... Also demonstrate its correctness by using the string constructor.
Console.WriteLine(GetStringStackalloc());
Console.WriteLine(new string('a', 10) + new string('z', 40));
}
}aaaaaaaaaazzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
aaaaaaaaaazzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
Review, operator. You can initialize a char buffer with stackalloc and use that to construct a new string type. This operator can also be used for other primitive data type buffers.
Discussion. The C# specification describes the purpose of the stackalloc operator as a way to circumvent the standard garbage collection mechanism.
So The memory allocated by the function is freed upon return from the function, when the activation record is popped from the stack.
Thus The Stackalloc feature in C# is a version of the alloca function in many C implementations.
Stackalloc is used as a way of manually allocated memory buffers that can be used without type safety checks. This operator can be used for external DLL code written in other languages.
Dot Net Perls is a collection of tested code examples. Pages are continually updated to stay current, with code correctness a top priority.
Sam Allen is passionate about computer languages. In the past, his work has been recommended by Apple and Microsoft and he has studied computers at a selective university in the United States.
This page was last updated on Feb 18, 2023 (simplify).