關於堆疊的內容網上已經有很多資料了,這是我找的加上自己理解的一篇說明文:
一:概念
1.棧:當程式進入乙個方法時,會為這個方法單獨分配一塊私屬儲存空間,用於儲存這個方法內部的區域性變數,當這個方法結束時,分配給這個方法的棧會被釋放,這個棧中的變數也將隨之釋放。
2.推:存放不在當前方法棧中的那些資料
二、記憶體區域型別
1.暫存器:最快的儲存區, 由編譯器根據需求進行分配,我們在程式中無法控制;
1. 棧:存放基本型別 的變數資料和物件的引用,但物件本身不存放在棧中,而是存放在堆(new出來的物件)或者常量池中(字串常量物件存放的常量池中),區域性變數【注意:(方法中的區域性變數使用final修飾後,放在堆中,而不是棧中)】
2.堆:存放使用new建立的物件,全域性變數
3. 靜態域:存放靜態成員(static定義的);
4. 常量池:字串常量和基本型別常量(public static final)。有時,在嵌入式系統中,常量本身會和其他部分分割離開(由於版權等其他原因),所以在這種情況下,可以選擇將其放在rom中 ;
5. 非ram儲存:硬碟等永久儲存空間
三、棧中放的東西,圖示:
四、堆存放示意圖:
對於string類的物件特別說明一下:
如何保證Redis中存的都是熱點資料?
具體的可以看之前的這篇部落格,考的就是redis的逐出演算法。達到最大記憶體後的,對被挑選出來的資料進行刪除的策略 影響資料逐出的相關配置 檢測易失資料 可能會過期的資料集server.db i expires volatile lru 挑選最近最少使用的資料淘汰 volatile lfu 挑選最近...
記憶體中的堆疊 堆疊平衡
1 記憶體中的堆疊使用是先從 高位的位址 到 低位的位址 使用 儲存的。2 堆疊使用的時候,最後需要進行堆疊平衡,也就是去平衡esp中暫存器儲存的值 3 esp暫存器中儲存的值對應的就是當前堆疊使用的位置 4 如果當前的壓入的堆疊資料 不是通過push指令 後面不需要的話,一般就是在sub esp,...
資料結構中的堆疊和記憶體中的堆疊
記憶體常用的區域分類 棧區 stack 堆區 heap 全域性區 static區 文字常量區 程式 區。棧區 由編譯器自動分配和釋放,遵循 後進先出 的規則。在函式呼叫時,第乙個進棧的是主函式中的下一條指令位址,然後是函式的各個引數 大多數c編譯器中,引數從右往左入棧 然後是函式的區域性變數。靜態變...