ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 动态分配内存地址(.NET)

动态分配内存地址(.NET)

原创 Linux操作系统 作者:iDotNetSpace 时间:2009-04-15 15:05:11 0 删除 编辑

在前一篇中构造的双向循环链表,指针变量所指向的地址实属静态分配,把结构体的成员字段赋值后,运行库就会分配一定内存给该变量。.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/

--> 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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-01-04

  • 博文量
    2376
  • 访问量
    5314892