文章目录
  1. 1. 堆栈概述
  2. 2. 堆内存和栈内存的比较

堆栈概述

  1. 对于学习缓冲区溢出,堆栈是一个不容忽视的概念,堆栈是两种数据结构。前一段时间经过对栈溢出利用的学习,明白了栈空间是在程序设计时已经规定好怎么使用,使用多少的内存空间。典型的栈变量包含函数的普通变量、数组等。栈变量在使用的时候不需要额外的申请操作,系统会根据函数中的变量声明自动在函数栈帧中给其预留空间。
  2. 对于堆而言,它具备以下特性:
  • 堆是一种在程序运行时动态分配的内存。
  • 堆在使用时需要程序员专用函数进行申请,如C语言中的malloc函数、C++中的new函数等。
  • 一般用一个堆指针来使用申请得到的内存,读、写、释放都通过这个指针来完成。
  • 使用完毕后需要把堆指针传给堆释放函数回收这片内存,否则会造成内存泄露。典型的释放函数包括free、delete等。

堆内存和栈内存的比较

类型 堆内存 栈内存
典型用例 动态增长的链表等数据结构哦 函数局部数组
申请方式 需要用函数申请,通过返回的指针使用,如p=malloc(8); 在程序中直接申明即可,如char buffer[8];
释放方式 需要把指针传给专用的释放函数,如free 函数返回时由系统自动回收
管理方式 需要程序员处理申请和释放 申请后直接使用,申请与释放由系统自动完成,最后达到栈区平衡
所处位置 变化范围很大 0x0012xxxx
增长方向 由内存低地址向高地址排列 由内存高地址向低地址增加
文章目录
  1. 1. 堆栈概述
  2. 2. 堆内存和栈内存的比较