什么时候在c#中的堆栈上分配?
我一直在努力弄清楚事情在堆栈上的分配,我无法弄清楚你将如何使数组(或其中的值)在堆栈上分配;
在这个例子中: public void foo() { int bar[] = new int [10]; } 堆栈中将分配10个int结构体,只有指向它们的指针才能堆叠,正确吗? 如何使固定大小的数组去堆栈?如果我使用我定义的水道怎么办? 如果我想要将数组大小作为参数传递给函数呢? 据我所知,当函数被调用时,如果调用函数的大小是已知的,那么应该没有问题在栈上获取任意大小的数组. 我甚至应该打扰这个吗?据我了解,在堆栈上获取这个固定大小的数组可以提高性能,因为没有堆分配完成. 解决方法
是,对的.
例: public void unsafe foo() { int* bar = stackalloc int [10]; } 您将不得不使用pointer arithmetic访问阵列的成员.
按预期工作: public void unsafe foo(int length) { int* bar = stackalloc int [length]; }
不,一般不是.除非您处理一些非常具体的性能关键场景,例如重型数学计算,加密,压缩等,这样做并没有真正的好处. 另请参阅this question进行性能相关的讨论. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |