【发布时间】:2015-11-23 07:05:28
【问题描述】:
我一直试图弄清楚什么时候在堆栈上分配了东西,但我不知道如何让数组(或者更确切地说是其中的值)在堆栈上分配;
在这个例子中:
public void foo()
{
int bar[] = new int [10];
}
10 个 int 结构将分配在堆上,只有指向它们的指针会在堆栈上,对吗?
如何将固定大小的数组放入堆栈?如果我使用我定义的结构怎么办?
如果我想将数组大小作为参数传递给函数怎么办?
据我了解,如果在调用函数时知道大小,则在调用函数时在堆栈上获取任意大小的数组应该没有问题。
我应该为此烦恼吗?据我了解,将这个固定大小的数组放在堆栈上会提高性能,因为没有完成堆分配。
【问题讨论】:
-
Should I be bothered by this?可能不会。听起来你过早地优化和思考太低了。 -
stackalloc可用于强制分配一定数量的字节的堆栈。它有它的用途,但你应该非常确定你需要它 - 大多数程序(尤其是业务线应用程序)不需要它。 -
堆栈分配的数组在所有恶意软件攻击中占很大比例。
标签: c# arrays heap-memory allocation stack-memory