gpt4 book ai didi

c++ - 堆栈分配如何工作?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:41:58 25 4
gpt4 key购买 nike

你好,我想弄清楚 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];
}

堆栈上分配的重点不是在编译时预编译时( 等)数组的大小是多少?C# 如何管理这个“魔法”?如何创建堆栈框架?

最佳答案

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

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

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

关于c++ - 堆栈分配如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50385006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com