醉卧山林的执刀人 2017-02-03 01:34 采纳率: 0%
浏览 6054

创建一个对象,他在堆内存中还是在栈内存中

Person p =new Person(“张三”,20);
这样的,我可不可以这样理解new Person(“张三”,20)在堆内存中创建,分配内存地址。
Person p 在栈内存中创建,然后把堆内存中的内存地址付给栈内存中的p变量
我这样理解有错误吗

  • 写回答

10条回答 默认 最新

  • threenewbee 2017-02-03 03:40
    关注

    你根本什么也没有理解,你只是在背绕口令。你需要理解什么呢?你需要理解为什么有堆栈?堆栈是干嘛的。当你使用函数的时候,函数中定义的每个变量都需要找地方存储。函数的调用是可以递归的,也就是说一个函数可以调用自身。
    那么会出现什么问题呢?
    函数中定义的局部变量存在多个副本,看下面的例子:
    int foo(int n)
    {
    if (n == 0) return 0;
    int x = foo(n - 1);
    return x + n;
    }
    当我们调用foo(10)的时候,这个函数中虽然只有一个局部变量x,但是因为递归的关系,它存在同时存在9个的情况。
    很明显,这种情况我们用一个可以一端扩展/收缩的数据结构,也就是堆栈去存储是最简单的。当函数每次调用下一层,就扩张,反之就收缩。
    因此可以得到一个基本的结论,那些函数中定义的局部变量,一定是存放在堆栈上的。除此之外的变量,也就是同一个变量名,它在内存中没有副本的,就放在堆上。

    评论

报告相同问题?

悬赏问题

  • ¥15 u盘问题:盘符不显示 无媒体
  • ¥50 R语言读取nc按月均值转为tif
  • ¥30 智能车串级pid调参
  • ¥15 visual studio code翻译老是错误
  • ¥20 卫星测高数据的高程转换
  • ¥15 爬取招聘网站数据信息
  • ¥15 安装完tensorflow,import tensorflow as tf后报错,如何解决?
  • ¥15 ultralytics库导出onnx模型,模型失去预测能力
  • ¥15 linux下点对点协议连接2个USB串口的硬件流量控制问题
  • ¥15 SQL数据自动生成问题