C# 哪个对象是在内存的哪个部分创建的?

C# 哪个对象是在内存的哪个部分创建的?,c#,java,stack,heap,C#,Java,Stack,Heap,在上面的代码中,在内存的哪个部分创建了哪个对象和引用?(我指的是堆和堆栈) (来源:)既然您将问题标记为Java,我想您的意思是Java。直接从马嘴里说: Java虚拟机有一个在所有Java虚拟机之间共享的堆 虚拟机线程。堆是 从中删除的运行时数据区域 所有类实例的内存和 已分配阵列 这里有一个关于前一个SO问题的详细讨论(这是一个关于该主题的语言不可知论讨论) 这里有一篇来自C#corner的文章,详细介绍了C#中的问题。订单和客户都在堆中。尽管Customer可能是一个结构,但它是引用类

在上面的代码中,在内存的哪个部分创建了哪个对象和引用?(我指的是堆和堆栈)



(来源:)

既然您将问题标记为Java,我想您的意思是Java。直接从马嘴里说:

Java虚拟机有一个在所有Java虚拟机之间共享的堆 虚拟机线程。堆是 从中删除的运行时数据区域 所有类实例的内存和 已分配阵列

这里有一个关于前一个SO问题的详细讨论(这是一个关于该主题的语言不可知论讨论)


这里有一篇来自C#corner的文章,详细介绍了C#中的问题。

订单和客户都在堆中。尽管Customer可能是一个结构,但它是引用类型(例如类)的组合成员

所有字符串都是引用类型,并在堆上创建

我不确定Ship类,因为我没有它的声明(即,我不知道它是一个结构还是一个类)

int iTotal变量是在堆栈上创建的


C#也是如此。Java可能有不同的规则。

你不应该自己做作业吗?不,因为我不是学生:)然后问一个看起来不是100%像作业问题的问题……这个链接可能会有帮助:哇,你加载的图片直接来自这篇文章(),这篇文章非常清楚地解释了你在问什么。加上我在下面给出的链接,应该足以让您继续…David,您所说的“Customer可能是一个结构,它是引用类型的组合成员”是什么意思?Customer可能已声明为struct Customer{}。struct使Customer成为一个值类型,在正常情况下,它将被放在堆栈上。然而,因为Customer是类Order的成员,类Order是放在堆上的引用类型,所以Customer也放在堆上。啊!谢谢你的解释!在C#/Java中的所有此类问题中,我总是遗漏一些信息。当实际对象(实例)在堆中时,指向它们(占用实际内存)的引用是堆栈分配的:sProductName是对堆分配字符串的堆栈分配引用。。。然后,这种语言再次试图隐藏引用和对象不相同的事实。。。不幸的是。@dribeas…还有拳击。@uzay95一句话,不。C#corner链接中的这句话应该可以帮助您:“堆栈或多或少负责跟踪代码中执行的内容(或被“调用的内容”)。堆或多或少负责跟踪对象(我们的数据,嗯……大部分——我们稍后再讨论。)“从1.6版开始,从实现的角度来看,这不再适用于所有情况。对于某些对象,如字符串文字,这从来都不是完全适用的。
public class Order
{
    static Customer cust = new Customer();
    string sEmpty = "";

    public static void main(String args[])
    {
        int iTotal = 10;
        string sProductName = "Salt";
        Ship shp = new Ship();
    }
}