【发布时间】:2015-06-02 03:53:10
【问题描述】:
popcount 和 count consecutive zeros 等函数的一些最佳版本使用表查找来获得最终答案。
在 C 和 C++ 中,可以在堆栈上分配数组并快速访问它们。
在 C# 中也有办法做到这一点吗?据我所知,stackalloc 只能在函数内使用,因此数组不会持久化。
我有一个小的查找表,我希望能够尽快访问它,因此我更愿意将它分配在堆栈上而不是堆上。
【问题讨论】:
-
在栈上分配了一个原始类型的局部变量,不是吗?
-
“据我所知,stackalloc 只能在函数中使用,因此数组不会持续存在” - 我很确定你问的问题是不可能的. "无法显式释放使用 stackalloc 分配的内存。在函数成员执行期间创建的所有堆栈分配内存块都在该函数成员返回时自动丢弃" - Tell me more。这就是使用本地上下文堆栈的意义。
-
"
stackalloc只能在函数中使用,因此数组不会持续存在。" 好吧,这正是堆栈的工作原理......我认为那里一定是你不太了解堆栈的东西...为什么访问堆栈会比堆快? -
如果它是一个您想要持久化的数组,那么根据定义,它只是不能存在于堆栈中。
-
“嗯,这很蹩脚。你会认为你可以对数组做一些事情来加快访问速度,因为它们不能保持不变” -为什么不按常规方式分配一个数组并将其分配给一个静态字段?
标签: c# arrays performance heap-memory stack-memory