一、前言
学习计算机知识也这么久了,在数据结构的学习中也对栈和堆这2种数据结构有一定了解。什么栈是FILO啊,最大堆、最小堆啊,但是每当看到书中说什么栈内存、堆内存、堆栈,就会一脸蒙逼,因此这回总算是下定决心好好深入了解下这个概念了。也就是操作系统中的栈和堆。(OS中的栈、堆与DS中的栈、堆不一样)
二、概念区分
操作系统中三个常常遇到的概念,栈、堆、堆栈。那么这三个概念到底是什么鬼?先简单的说下,然后再按C和Java的情况细说
栈区:Stack
- 分配方式:由系统自动分配
- 存储顺序:有顺序,先进后出的形式,逐一压栈
- 与数据结构中的栈的关系:类似于DS中的栈,同样的特性(都写说的是类似,我看就是一样的,同样的特性,同样的出栈、入栈方式,同样的栈顶指针….)
堆区:heap
- 分配方式:由程序员向OS申请
- 存储顺序:无序,任意顺序
- 与DB中的堆的关系:与DB中的堆不一样,分配方式倒是类似于链表
堆栈
这个是最蛋疼的,最让我困惑的。栈是栈,堆就是堆,哪来的一个堆栈?然后百度堆栈,总是分开谈,要么就是直接使用堆栈这个词。很郁闷。
查了很久,才发现,堆栈其实就是栈嘛