shilinc

导航

stackalloc参考

C# 程序员参考 
stackalloc(C# 参考) 

在堆栈上分配内存块。

type * ptr = stackalloc type [ expr ];

参数

Type

非托管类型。

ptr

指针名。

expr

整型表达式。


在堆栈上而不是在堆上分配一个内存块,它的大小足以包含 type 类型的 expr 元素;该块的地址存储在 ptr 指针中。此内存不受垃圾回收的制约,因此不必将其钉住(通过 fixed)。内存块的生存期受定义它的方法的生存期的限制(没有在方法返回之前释放内存的途径)。

stackalloc 仅在局部变量的初始值设定项中有效。

由于涉及指针类型,stackalloc  要求不安全 上下文。请参见不安全代码和指针

stackalloc 类似于 C 运行时库中的 _alloca

安全性

不安全代码是天生比非不安全替代代码安全性更低的代码。但是,通过使用 stackalloc 可以自动启用公共语言运行库 (CLR) 中的缓冲区溢出检测功能。如果检测到缓冲区溢出,进程将尽快终止,以最大限度地减小执行恶意代码的机会。

示例
// cs_keyword_stackalloc.cs
// compile with: /unsafe
using System;
class Test
{
static unsafe void Main()
{
int* fib = stackalloc int[100];
int* p = fib;
*p++ = *p++ = 1;
for (int i = 2; i < 100; ++i, ++p)
{
*p = p[-1] + p[-2];
}
for (int i = 0; i < 10; ++i)
{
Console.WriteLine(fib[i]);
}
}
}

输出

1
1
2
3
5
8
13
21
34
55

posted on 2006-06-25 21:23  SHILIN  阅读(1277)  评论(0)    收藏  举报