動態分配記憶體地址(.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++指標記憶體
- Pytorch視訊記憶體動態分配規律探索PyTorch記憶體
- C++ 動態記憶體分配與名稱空間C++記憶體
- 垃圾收集器與記憶體分配策略_記憶體分配策略記憶體
- 函式指標、回撥函式、動態記憶體分配、檔案操作函式指標記憶體
- c語言野指標與結構體指標動態記憶體分配小解C語言指標結構體記憶體
- java-方法記憶體分配Java記憶體
- go記憶體分配器Go記憶體
- 深度理解glibc記憶體分配記憶體
- java基礎-記憶體分配Java記憶體
- hadoop 記憶體分配規則Hadoop記憶體
- C語言-記憶體分配C語言記憶體
- 記憶體分配策略學習記憶體
- 記憶體的分配與釋放,記憶體洩漏記憶體
- [譯].Net中的記憶體-什麼分配在了哪裡記憶體
- linux記憶體管理(一)實體記憶體的組織和記憶體分配Linux記憶體
- C中的記憶體分配模型記憶體模型
- 記憶體分配問題處理記憶體
- mimalloc記憶體分配程式碼分析記憶體
- C語言的記憶體分配C語言記憶體
- [20210126]探究oracle記憶體分配.txtOracle記憶體
- 【Java】 記憶體分配全面淺析Java記憶體
- JVM GC 與 記憶體分配策略JVMGC記憶體
- Python如何管理記憶體?記憶體分配機制是什麼?Python記憶體
- jvm:記憶體模型、記憶體分配及GC垃圾回收機制JVM記憶體模型GC
- 自動識別Android不合理的記憶體分配Android記憶體
- MySQL記憶體管理,記憶體分配器和作業系統MySql記憶體作業系統
- Java記憶體區域與分配策略Java記憶體
- 【記憶體管理】頁面分配機制記憶體
- curl 中減少記憶體分配操作記憶體
- Go記憶體分配和GC的理解Go記憶體GC
- JVM 之 記憶體分配與回收策略JVM記憶體
- 深入理解golang:記憶體分配原理Golang記憶體
- Netty 中的記憶體分配淺析Netty記憶體
- MySQL OOM 系列一 Linux記憶體分配MySqlOOMLinux記憶體
- JVM垃圾回收和記憶體分配策略JVM記憶體
- 圖解Go語言記憶體分配圖解Go記憶體