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.
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.
null
char
.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
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.
The C# specification describes the purpose of the stackalloc
operator as a way to circumvent the standard garbage collection mechanism.
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.