当前位置:首页 > 内存 > 正文

堆栈内存分配

  • 内存
  • 2024-05-21 15:16:17
  • 1467

一、堆栈是什么?程序内存分配知识点

在计算机领域,栈是一个不可忽视的概念,但是很多人;即使计算机科学家也不明白堆栈实际上是两个数据结构。堆栈是一种按顺序排列数据项的数据结构。数据项只能从一侧(称为栈顶)插入和删除。
📚堆和栈的区别
堆:随机顺序:后进/先出(last-in/first-out)。
🧱内存分配
C/C++编译后的程序所占用的内存分为以下几个部分:栈区;垃圾填埋区;全局区(静态区);绝对恒定面积;程序代码区。
📊设置区域
功能参数值;由编译器自动分配生成,用于存储局部变量值等。它的作用类似于数据结构中的堆栈。
📈堆区
一般是由程序员分配和释放的,除非程序员自己释放。当程序完成时,操作系统可以回收它。这与数据结构中的堆不同;注意,分配方法类似于链表。
🌍全局区(静态区)
未初始化的全局变量和未初始化的静态变量在同一个区域。相邻区域。程序完成后由系统释放。
📝文字常量区
这里保存常量字符串,程序运行结束后由系统释放。
💻程序代码区
存放函数体的二进制代码。
🌟示例程序
是前辈写的,非常详细。
📌分配内存
10和20字节的分配区域位于堆区域。
🔍搜索字符串
123456\0被放置在常量区域,编译器可以将其优化到与p3指向的“123456”相同的位置。


二、堆和栈的区别

堆和栈是两个不同的概念。
📚堆和栈的定义
堆(heap)上分配的内存不是由系统释放的,是动态分配的。堆栈上分配的内存由系统自动释放,并且是静态分配的。
🔍堆和栈的区别
malloc或new分配的内存是从堆中分配的内存,必须由程序员自己释放,而free是分配的内存。用来释放它,否则这块内存会一直被占用而不释放,就会出现“内存泄漏”现象。这会导致系统分配的内存越来越少,导致系统崩溃。
📊栈的数据结构
栈是一种实现“后进先出”算法的数据结构。堆栈就是这样一种数据结构。它在内存中开辟一个存储区域,并将数据逐一顺序存储(即“压缩”)到该区域中。
🎾栈实现原理
数据是一张一张存储的。这个过程称为“推。压栈时,每将一条数据压入栈中,就会放入与前一个单元相连的下一个单元中,并且栈指针中的地址自动加1。数据根据堆栈指针中的地址进行存储,堆栈指针中的地址数会自动减1。这个过程称为“出栈”。堆栈寄存器是存储堆栈的寄存器。