C# stackalloc Operator

Use the stackalloc and unsafe keywords to allocate, and write to, a char buffer.
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.Unsafe
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.

GetStringStackalloc: This uses the stackalloc operator and is in an unsafe context.

Info: Stackalloc creates a buffer of 51 chars (102 bytes). The memory is initialized to the values "a", "z" and the null char.

Finally: The program returns a string type that was created through the constructor. The string resides on the managed heap.

String Constructor
C# program that uses stackalloc operator 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)); } } Output 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.ValueType
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: Stackalloc 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.
© 2007-2019 Sam Allen. Every person is special and unique. Send bug reports to info@dotnetperls.com.
HomeSearch
Home
Dot Net Perls