python環境下的記憶體分析
阿新 • • 發佈:2018-12-15
1.記憶體分析
python原始碼[字尾名為.py的文字檔案] 執行在直譯器中,得到運算結果 問題:怎麼執行的?
計算機執行一個程式 程式/軟體的執行[核心機制] 原始碼程式[語義化的定義了資料、流程等控制單元] 記憶體操作[載入記憶體->變數/函式/型別/方法…] 運算處理[執行運算的過程,需要提取資料執行運算(按照流程進行邏輯控制)]
既然所有的軟體,都是這樣執行的,直接執行就好!為什麼還要分析執行過程中的記憶體? 因為需要在有限的硬體資源上,執行儘可能多的軟體,需要有效的利用記憶體空間。 比如一臺計算機硬體[記憶體|硬體|8G] 作業系統[系統軟體]:控制和管理硬體操作,完成軟體資料處理 使用硬體記憶體執行作業系統軟體[2G已用|6G可用] 直接分配記憶體空間,操作使用記憶體資料 –>應用軟體:執行各種業務相關的資料運算 –>每個軟體執行,都需要記憶體] –>向作業系統申請記憶體,作業系統給對應的軟體分配記憶體 –>軟體在申請到的記憶體中分配資料,載入資料、完成軟體的執行
目標:軟體的執行,需要將軟體資料載入到記憶體中。
2.PYTHON中的記憶體處理
python程式是怎麼執行的? python需要一個開發/執行環境,開發好的python程式可以通過執行命令python 檔名 直接執行 核心:一個python程式要要執行,就需要向直譯器申請執行的記憶體空間 為了提高程式執行效率和有效的利用記憶體空間,將申請到記憶體空間進行了區域劃分
- 棧記憶體和堆記憶體
- 靜態區/常量區
- 資料區/方法區 python互動模式下的程式碼演示 python互動模式下
程式碼演示:
"""
Version 1.1.0
Author lkk
Email [email protected]
DESC TODO
"""
def back(m):
m.append('10')
def back2(n):
n = 12
if __name__ == "__main__":
a = [20]
b = 20
back(a) # ? 發生了什麼
back2(b) # ? 發生了什麼
print(a) # [20, '10']!? 什麼結果 **A[20, '10']**? B[20]? C['10']?
print(b) # 20!? 什麼結果 **A20**? B12? C2012?
記憶體執行分析