Csharp/C Sharp/Language Basics/stackalloc
Версия от 18:31, 26 мая 2010; (обсуждение)
Содержание
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>