C# 堆栈真的应该在C程序中分配吗?

C# 堆栈真的应该在C程序中分配吗?,c#,heap-memory,allocation,stack-memory,C#,Heap Memory,Allocation,Stack Memory,根据我对C的了解,我相信我是对的,值类型分配在堆栈上,引用类型都位于堆上。但是如果类中的字段是值类型,那么它是在堆上而不是在堆栈上分配的,我仍然是对的,对吗 话虽如此,我也知道每个C程序都是一个类,由类组成。这意味着C程序中声明的任何变量(值类型或引用类型)都应该在堆上分配 那么,我可以推断的是,堆栈可能并没有真正用于C程序中。我说“可能”是因为可能会有一些特殊的情况,但我不知道有一个。你基本上是对的: 然而,方法的局部变量实际上是从堆栈中分配的。这就是值类型的全部真相。对于引用类型,实际对象、

根据我对C的了解,我相信我是对的,值类型分配在堆栈上,引用类型都位于堆上。但是如果类中的字段是值类型,那么它是在堆上而不是在堆栈上分配的,我仍然是对的,对吗

话虽如此,我也知道每个C程序都是一个类,由类组成。这意味着C程序中声明的任何变量(值类型或引用类型)都应该在堆上分配


那么,我可以推断的是,堆栈可能并没有真正用于C程序中。我说“可能”是因为可能会有一些特殊的情况,但我不知道有一个。

你基本上是对的:


然而,方法的局部变量实际上是从堆栈中分配的。这就是值类型的全部真相。对于引用类型,实际对象、字符串、数组等在堆上分配,但指针本身在堆栈上分配。

您基本上是正确的:


然而,方法的局部变量实际上是从堆栈中分配的。这就是值类型的全部真相。对于引用类型,实际对象、字符串、数组等在堆上分配,但指针本身在堆栈上分配。

引用类型存储在堆中。对于引用类型中包含的值类型,这是正确的。相反,在堆栈中存储对存储在堆中的对象的引用


关于500-Internal Server Error指出的方法的局部变量。它们被分配给堆栈。

一个引用类型存储在堆中。对于引用类型中包含的值类型,这是正确的。相反,在堆栈中存储对存储在堆中的对象的引用


关于500-Internal Server Error指出的方法的局部变量。它们被分配到堆栈。

函数/方法的局部变量(有些例外)在Microsoft.NET的堆栈上分配。您是否在代码中正常使用函数/方法?我知道:-那为什么我们会得到StackOverflowException?我不知道。谢谢你让我知道。这似乎是堆栈的唯一使用案例,对吗?Eric Lippert在这篇文章中对值类型的去向给出了更精确的定义。函数/方法的局部变量(有些例外)在Microsoft.NET的堆栈上分配。您是否在代码中正常使用函数/方法?我知道:-那为什么我们会得到StackOverflowException?我不知道。谢谢你让我知道。这似乎是堆栈的唯一用例,对吗?这是Eric Lippert的一篇文章,他对值类型的去向给出了更精确的定义。嗯。。。。我只是想了想。这是否意味着如果我在不安全的代码中使用指针,它们也会在堆栈上分配?是的,局部引用变量指针会在堆栈上分配,但它指向的对象驻留在堆上。您可以安全地将这样一个引用的副本传递给一个未受管理的例程—这样做时,您通常希望先将其锁定,以便垃圾收集器不会在内存中移动数据。Hmmmm。。。。我只是想了想。这是否意味着如果我在不安全的代码中使用指针,它们也会在堆栈上分配?是的,局部引用变量指针会在堆栈上分配,但它指向的对象驻留在堆上。您可以安全地将此类引用的副本传递给未受管理的例程—这样做时,您通常希望先锁定它,以便垃圾收集器不会在内存中移动数据。为什么有人否决了这个答案?我想这是真的,为什么有人否决了这个答案?我想这也是真的