動態分配記憶體地址(.NET)
在前一篇中構造的雙向迴圈連結串列,指標變數所指向的地址實屬靜態分配,把結構體的成員欄位賦值後,執行庫就會分配一定記憶體給該變數。.NET中實現動態分配記憶體使用關鍵字"stackalloc","stackalloc"取意為在堆疊上分配地址,"stackalloc"的用法:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->person* p_person = stackalloc person[4];
stackalloc後接值型別名稱[變數個數],返回一個指標變數或指標變數陣列。假設以p_person[0]為例,p_person[0]只作為一個普通的變數使用,只能使用.操作符,不能使用->操作符,等同於一個陣列元素了。注意:陣列元素的上限也必須小於指定的變數個數,否則執行庫不能handle這個錯誤。實現為雙向迴圈連結串列動態分配記憶體的main方法:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->person* p_person = stackalloc person[4];
Code
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> 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 }
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 動態記憶體分配記憶體
- C++ 動態記憶體分配C++記憶體
- C++動態記憶體分配C++記憶體
- 簡單理解動態記憶體分配和靜態記憶體分配的區別記憶體
- C語言(動態記憶體分配)C語言記憶體
- C++ 動態記憶體分配與名稱空間C++記憶體
- Pytorch視訊記憶體動態分配規律探索PyTorch記憶體
- C語言malloc()函式:動態分配記憶體空間C語言函式記憶體
- 記憶體動態分配與釋放,malloc和new區別記憶體
- 智慧指標的模板,用來管理動態分配的記憶體指標記憶體
- Netty 中的記憶體分配淺析Netty記憶體
- JavaScript記憶體分配JavaScript記憶體
- JVM記憶體分配JVM記憶體
- java記憶體分配Java記憶體
- 二維陣列的動態記憶體分配和釋放 (轉)陣列記憶體
- 垃圾收集器與記憶體分配策略_記憶體分配策略記憶體
- Netty原始碼—六、tiny、small記憶體分配Netty原始碼記憶體
- 動態記憶體管理記憶體
- JVM 記憶體模型 記憶體分配,JVM鎖JVM記憶體模型
- 探索iOS記憶體分配iOS記憶體
- Java 記憶體分配策略Java記憶體
- java jvm 記憶體分配JavaJVM記憶體
- [C++]記憶體分配C++記憶體
- 【S13】vector和string優先於動態分配的記憶體記憶體
- c語言野指標與結構體指標動態記憶體分配小解C語言指標結構體記憶體
- Memcache 記憶體分配策略和效能(使用)狀態檢查記憶體
- 記憶體的分配與釋放,記憶體洩漏記憶體
- C語言-記憶體管理之一[記憶體分配]C語言記憶體
- java基礎-記憶體分配Java記憶體
- C語言-記憶體分配C語言記憶體
- java-方法記憶體分配Java記憶體
- go記憶體分配器Go記憶體
- Java 堆疊記憶體分配Java記憶體
- 記憶體分配策略學習記憶體
- 記憶體分配的確定記憶體
- weblogic的記憶體分配Web記憶體
- 記憶體分配方式 (轉)記憶體
- Netty 中的記憶體分配淺析-資料容器Netty記憶體