1. 程式人生 > 其它 >記憶體中的堆疊和資料結構堆疊區別

記憶體中的堆疊和資料結構堆疊區別

記憶體中的堆疊和資料結構堆疊不是一個概念,可以說記憶體中的堆疊是真實存在的物理區,資料結構中的堆疊是抽象的資料儲存結構。

1.記憶體中的堆疊
記憶體空間在邏輯上分為三部分:程式碼區、靜態資料區和動態資料區,動態資料區又分為棧區和堆區。

程式碼區:儲存方法體的二進位制程式碼。高階排程(作業排程)、中級排程(記憶體排程)、低階排程(程序排程)控制程式碼區執行程式碼的切換。
靜態資料區:儲存全域性變數、靜態變數、常量,常量包括final修飾的常量和String常量。系統自動分配和回收。
棧區:儲存執行方法的形參、區域性變數、返回值。由系統自動分配和回收。
例如 int method(int a){int b;}棧中儲存引數a、區域性變數b、返回值temp。


堆區:new一個物件的引用或地址儲存在棧區,指向該物件儲存在堆區中的真實資料。由程式設計師分配和回收(Java中由JVM虛擬機器的垃圾回收機制自動回收)。
例如 Class Student{int num; int age;} main方法中Student stu = new Student();分配堆區空間中儲存的該物件的num、age,變數stu儲存在棧中,裡面的值是對應堆區空間的引用或地址。

2.資料結構中的堆疊
棧:是一種連續儲存的資料結構,特點是儲存的資料先進後出。
堆:是一棵完全二叉樹結構,特點是父節點的值大於(小於)兩個子節點的值(分別稱為大頂堆和小頂堆)。它常用於管理演算法執行過程中的資訊,應用場景包括堆排序,優先佇列等。

我們嚮往遠方,卻忽略了此刻的美麗