堆与栈,深拷贝与浅拷贝的区别

本文介绍了内存区域结构,强调堆与栈的区别,堆是用户自定义分配的内存,易导致内存泄漏,而栈由系统自动分配和释放。调用栈用于存储运行中的子程序信息。此外,还探讨了深拷贝和浅拷贝的概念,浅拷贝仅复制指针,对象间共享内存,深拷贝则创建完全独立的对象副本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内存区域结构:                         

                               Memory
                            ------------------
                           |      Heap       |
                           |------------------|
                           |      Stack       |
                           |------------------|
                           | Static Variables|
                           |------------------|
                           |      Code       |
                           |------------------|

堆区与栈区:

堆区是用户自己创建的内存空间,例如使用C++里的malloc,如果使用完不手动释放,容易发生内存泄漏。栈是系统给开发人员自动分配的空间,在运行结束后,也会自动释放。

Call stack 调用栈,英文直接简称“the stack”,别称为运行时栈(run-time stack),执行栈(execution stack),控制栈(control stack)与机器栈(machine stack)。是计算机科学中存储系统正在运行的子程序消息的栈,几乎所有的计算机程序都依赖于调用栈,而高级语言一般把调用栈的信息隐藏至后台。在调用栈中,压入的一组数据称为一个stack frame,一个stack frame包括一个函数和它的参数。

堆的空间要远远大于栈,开发人员可以分配的最大的堆的大小就是系统的内存,但是对于栈来说,64位的Windows最大的栈的大小是1MB,Linux系统是10MB。

引用数据类型往往在栈中存储指针,该指针指向堆中该实体的起始地址。

深拷贝与浅拷贝:

这个概念只针对Object和Array这样的引用数据类型,浅拷贝只复制了指针,而不复制对象本身,新旧对象还是共享同一块内存,对新对象的修改会影响旧对象的值。深拷贝会创造一个一模一样的对象,新对象与原来的对象不共享内存,二者之间没有任何关系,对新对象的修改不会影响旧对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值