代码之家  ›  专栏  ›  技术社区  ›  uzay95

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

  •  -9
  • uzay95  · 技术社区  · 15 年前
    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();
        }
    }
    

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

    alt text http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/Images/heapvsstack1.gif

    2 回复  |  直到 15 年前
        1
  •  4
  •   Community basarat    7 年前

    既然你标记了你的问题JAVA,我就假设你是用Java。直接从马嘴里:

    Java虚拟机具有在所有Java之间共享的堆。 虚拟机线程。堆是 运行时数据区域,从该区域 所有类实例的内存和 已分配数组。

    JVM Spec

    这里是一个 link 前一个非常详细的问题(并且是关于这个主题的语言不可知论讨论)。

    这里有一个 link 从C角的一篇文章,详细描述了C角的问题。

        2
  •  1
  •   David Andres    15 年前

    订单和客户都在堆积如山。虽然customer可以是结构,但它是引用类型(例如,类)的组合成员。

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

    我不确定Ship类,因为我没有它的声明(也就是说,我不知道它是结构还是类)。

    int itotal变量在堆栈上创建。

    这对C来说是真的。Java可能在游戏中有不同的规则。