Csharp/C Sharp/Language Basics/stackalloc

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

allocates 26 characters on the stack the for loop assigns alphabetic characters to each element

<source lang="csharp"> using System; public unsafe class Starter {

   public static void Main() {
       char* pChar = stackalloc char[26];
       char* _pChar = pChar;
       for (int count = 0; count < 26; ++count) {
           (*_pChar) = (char)(((int)("A")) + count);
           ++_pChar;
       }
       for (int count = 0; count < 26; ++count) {
           Console.Write(pChar[count]);
       }
   }

}

</source>


Invalid Cast Exceptions with Implicit Operators

<source lang="csharp">

public class TestClass {

   private MainClass MyMainClassObject;
  
   public TestClass()
   {
       MyMainClassObject = new MainClass();
   }
  
   public static implicit operator MainClass(TestClass Source)
   {
       return Source.MyMainClassObject;
   }

}

public class MainClass {

   public static void Main()
   {
       object MyObject;
       MainClass MyMainClassObject;
  
       MyObject = new TestClass();
       MyMainClassObject = (MainClass)MyObject;
   }

}

</source>


stackalloc Demo

<source lang="csharp"> using System; class MainEntryPoint {

   static unsafe void Main() {
       Console.Write("How big an array do you want? \n> ");
       string userInput = Console.ReadLine();
       uint size = uint.Parse(userInput);
       long* pArray = stackalloc long[(int)size];
       for (int i = 0; i < size; i++)
           pArray[i] = i * i;
       for (int i = 0; i < size; i++)
           Console.WriteLine("Element {0} = {1}", i, *(pArray + i));
   }

}

</source>


Use stackalloc to allocate memory for integer array

<source lang="csharp"> using System; class TestStackallocApp {

   unsafe public static void Foo(int* pa)
   {
       for (int* ip = pa; ip < (pa+5); ip++)
       {
           Console.WriteLine("value {0} at address: {1}", *ip, (int)ip);
       }
   }
  
   static void Main(string[] args)
   {
       unsafe
       {
           int* pa = stackalloc int[5];
           pa[0] = 12;
           pa[1] = 34;
           pa[2] = 56;
           pa[3] = 78;
           pa[4] = 90;
           Foo(pa);
       }
   }

}

</source>