笔记(栈和堆)

栈(Stack)和堆(Heap)是两个常见的内存分配和管理概念。

1. 栈(Stack):栈是一种后进先出(LIFO)的数据结构,用于管理程序中的局部变量和函数调用。栈的大小是在程序编译时确定的,它提供了一块有限的内存空间用于存储函数的参数、局部变量和函数的返回地址等。栈的分配和释放是自动进行的,由编译器或运行时系统控制。

   当一个函数被调用时,其局部变量和参数被分配到栈上,并在函数执行完毕后自动释放。栈的优势是分配和释放快速,但由于其空间有限且固定,如果栈溢出会导致程序崩溃。

2. 堆(Heap):堆是一种动态分配的内存区域,用于存储程序运行时动态分配的数据。堆的大小通常比栈大得多,它的分配和释放由程序员显式地控制,如使用`new`(C++)或`malloc`(C语言)分配内存,再使用`delete`或`free`来释放堆上分配的内存。

   堆上分配的内存可以在程序的任意位置进行访问,不受局部作用域的限制。由于堆的动态特性,需要手动释放内存,否则可能导致内存泄露。堆的分配和释放可能会涉及到内部的数据结构,如链表或二叉堆。

栈和堆的选择取决于数据的生命周期、访问方式和大小等因素。通常,局部变量和临时数据可以使用栈进行管理,而需要动态分配或持久化的数据则可以使用堆。了解栈和堆的特性有助于更有效地管理内存并避免一些内存相关的错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值