stackalloc如何工作?

问题描述 投票:4回答:1

您好我想弄清楚stackalloc是如何工作的。所以来自C/C++从我的知识(有限)你不能动态地在堆栈上分配内存,就像在这里:

C/C++例子:

   void Allocate(int length){
     int vector[length];  //wont work
   }

然后C#发挥作用你可以用stackalloc做到这一点:

     void Allocate(int length){
      int []vector=stackalloc int [length];
     }

是不是在stack上分配compile-timeprecompile-timemacros等)的全部重点是阵列有多大?C#如何管理这个"magic"?如何创建堆栈框架?

c++ memory-management stackframe stackalloc c#-7.3
1个回答
5
投票

“在堆栈上分配”基本上意味着将堆栈的头部移动远离当前函数的堆栈帧的基础。通常它是一个固定的数量 - 一些局部变量的大小 - 但没有什么能阻止你的程序将堆栈头移动一个可变量,由一个参数决定。

避免这种情况的主要原因是它使堆栈溢出的可能性更大,而且很容易被粗心的程序员滥用。因此,C ++标准委员会decided not to adopt variable-length arrays喜欢在C99。 alloca()是一个特定于平台的非标准功能,甚至不是POSIX标准的一部分。

编辑:正如@PauloMorgado指出的那样,在C#中还有一个额外的考虑因素:堆栈上的分配不受垃圾收集的影响,而不是堆上的分配,这可能会激发C#中使用stackalloc()的风险。

© www.soinside.com 2019 - 2024. All rights reserved.