C#中是否可以使用基于堆栈的数组?

Bob*_*Bob 6 .net c# arrays stack

让我们说假设(读:我不认为我真的需要这个,但我很好奇,因为这个想法突然出现在我脑海中),人们想要在堆栈本地留出一堆内存,而不是在堆上.例如,像这样:

private void someFunction()
{
    int[20] stackArray; //C style; I know the size and it's set in stone
}
Run Code Online (Sandbox Code Playgroud)

我猜的答案是否定的.我能找到的只是基于堆的数组.如果有人需要这个,那会有任何解决方法吗?有没有办法以"值类型"方式留出一定数量的顺序存储器?或者是具有命名参数的结构的唯一方法(就像XNA中的Matrix结构有16个命名参数(M11-M44)的方式)?

the*_*oop 4

你想要的是stackalloc;不幸的是,您只能在不安全的代码中使用它,这意味着它不会在有限的权限上下文中运行。

您还可以为每个元素类型创建一个包含必要数量变量的结构,但是您需要为您想要使用的每个大小的“数组”创建一个新类型

  • `Nullable<T>` 仍然是一个结构体,所以它不起作用。想一想 - 当您声明递归结构时,您基本上是在要求 CLR 为无限的结构列表分配空间。 (2认同)