日期:2014-05-17  浏览次数:20813 次

C#有c/c++这样的栈"数组变量"吗?
比如c下面我可以这样写
void my_function()
{
    char stack[64];  //  一个char类型数组变量stack,共64个字节
    //...直接使用这个stack
}

而c#下面数组都是引用类型
一般用法是
char[] stack = new char[64];
我没看过IL代码,所以我假想空间都开在了堆上

有没有直接开在当前函数栈上的实现办法?或者我哪里想错了请纠正

------解决方案--------------------
非要用,可以在不安全的上下文中使用stackalloc。

http://msdn.microsoft.com/zh-cn/library/cx9s2sy4(v=vs.90).aspx
------解决方案--------------------
你说的栈上开空间并不是明智的做法,因为栈的大小往往很小,被你自己用的数据占用了,那么系统自己可用的就少了,随时可能会栈溢出。存放托管堆的做法没什么问题,用的时候取到栈上,不用的时候放会托管堆,毕竟现在不是DOS时代,程序都很大,数据也很大,而要自己管理数据的存取显然效率没有使用托管堆来得高。
C/C++的那套做法你还用的话,就是在编程的里程上倒退。