動態分配記憶體地址(.NET)

iDotNetSpace發表於2009-04-15

在前一篇中構造的雙向迴圈連結串列,指標變數所指向的地址實屬靜態分配,把結構體的成員欄位賦值後,執行庫就會分配一定記憶體給該變數。.NET中實現動態分配記憶體使用關鍵字"stackalloc","stackalloc"取意為在堆疊上分配地址,"stackalloc"的用法:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gtperson* p_person = stackalloc person[4];
stackalloc後接值型別名稱[變數個數],返回一個指標變數或指標變數陣列。假設以p_person[0]為例,p_person[0]只作為一個普通的變數使用,只能使用.操作符,不能使用->操作符,等同於一個陣列元素了。注意:陣列元素的上限也必須小於指定的變數個數,否則執行庫不能handle這個錯誤。實現為雙向迴圈連結串列動態分配記憶體的main方法:
動態分配記憶體地址(.NET)
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt 1 static void Main(string[] args)
 2         {
 3             unsafe
 4             {
 5                 person* p_person = stackalloc person[4];
 6                 person* point;
 7                 int index = 0;
 8                 
 9                  p_person[0].id = Guid.NewGuid();
10                 p_person[1].id = Guid.NewGuid();
11                 p_person[2].id = Guid.NewGuid();
12                 p_person[3].id = Guid.NewGuid();
13 
14                 p_person[0].previous = &p_person[3];
15                 p_person[1].previous = &p_person[0];
16                 p_person[2].previous = &p_person[1];
17                 p_person[3].previous = &p_person[2];
18 
19                 p_person[0].next = &p_person[1];
20                 p_person[1].next = &p_person[2];
21                 p_person[2].next = &p_person[3];
22                 p_person[3].next = &p_person[0];
23 
24                 point = &p_person[0];
25 
26                 do
27                 {
28                     Console.WriteLine("id:{0}" + "\n" +
29                         "previous address:0x{1:X}" + "\n" +
30                         "next address:0x{2:X}" + "\n",
31                         point->id, (uint)point->previous, (uint)point->next);
32                     point = point->next;
33                     index++;
34                 }
35                 while (index != FOUR);
36             }
37         }

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-589265/,如需轉載,請註明出處,否則將追究法律責任。

相關文章