首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stackalloc是如何工作的?

stackalloc是如何工作的?
EN

Stack Overflow用户
提问于 2018-05-17 06:45:54
回答 1查看 1.7K关注 0票数 5

你好,我正在尝试从我的知识(有限的)中了解stackalloc work.So是如何从C/C++中来的,您不能像这里这样动态地在堆栈上分配内存:

C/C++示例:

代码语言:javascript
复制
   void Allocate(int length){
     int vector[length];  //wont work
   }

然后C#开始发挥作用,您可以使用stackalloc来完成它

代码语言:javascript
复制
     void Allocate(int length){
      int []vector=stackalloc int [length];
     }

stack上分配不就是要知道compile-timeprecompile-time (macros等)数组的大小吗? C#是如何管理这个"magic"的?如何创建堆栈帧?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-17 08:29:59

“在堆栈上分配”基本上意味着将堆栈的头部移离当前函数的堆栈框架的底部更远。通常情况下,它是由一个固定的数量(一些局部变量的大小)决定的,但是没有什么可以阻止您的程序以变量的数量移动堆栈头,这是由其中一个参数决定的。

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

编辑:( @PauloMorgado )指出,在C#中还有一个额外的考虑:堆栈上的分配不受垃圾收集的约束,而不是堆上的分配,尽管存在风险,但这可能会促使在C#中使用stackalloc()

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50385006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档