Person p =new Person(“张三”,20);
这样的,我可不可以这样理解new Person(“张三”,20)在堆内存中创建,分配内存地址。
Person p 在栈内存中创建,然后把堆内存中的内存地址付给栈内存中的p变量
我这样理解有错误吗
创建一个对象,他在堆内存中还是在栈内存中
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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个的情况。
很明显,这种情况我们用一个可以一端扩展/收缩的数据结构,也就是堆栈去存储是最简单的。当函数每次调用下一层,就扩张,反之就收缩。
因此可以得到一个基本的结论,那些函数中定义的局部变量,一定是存放在堆栈上的。除此之外的变量,也就是同一个变量名,它在内存中没有副本的,就放在堆上。解决 3无用
悬赏问题
- ¥15 metadata提取的PDF元数据,如何转换为一个Excel
- ¥15 关于arduino编程toCharArray()函数的使用
- ¥100 vc++混合CEF采用CLR方式编译报错
- ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
- ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
- ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
- ¥50 如何openEuler 22.03上安装配置drbd
- ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
- ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
- ¥15 Windows11, backspace, enter, space键失灵