1. 程式人生 > >python環境下的記憶體分析

python環境下的記憶體分析

1.記憶體分析

python原始碼[字尾名為.py的文字檔案] 執行在直譯器中,得到運算結果 問題:怎麼執行的?

計算機執行一個程式 在這裡插入圖片描述 程式/軟體的執行[核心機制] 原始碼程式[語義化的定義了資料、流程等控制單元] 記憶體操作[載入記憶體->變數/函式/型別/方法…] 運算處理[執行運算的過程,需要提取資料執行運算(按照流程進行邏輯控制)]

既然所有的軟體,都是這樣執行的,直接執行就好!為什麼還要分析執行過程中的記憶體? 因為需要在有限的硬體資源上,執行儘可能多的軟體,需要有效的利用記憶體空間。 比如一臺計算機硬體[記憶體|硬體|8G] 作業系統[系統軟體]:控制和管理硬體操作,完成軟體資料處理 使用硬體記憶體執行作業系統軟體[2G已用|6G可用] 直接分配記憶體空間,操作使用記憶體資料 –>應用軟體:執行各種業務相關的資料運算 –>每個軟體執行,都需要記憶體] –>向作業系統申請記憶體,作業系統給對應的軟體分配記憶體 –>軟體在申請到的記憶體中分配資料,載入資料、完成軟體的執行

目標:軟體的執行,需要將軟體資料載入到記憶體中。

2.PYTHON中的記憶體處理

python程式是怎麼執行的? python需要一個開發/執行環境,開發好的python程式可以通過執行命令python 檔名 直接執行 核心:一個python程式要要執行,就需要向直譯器申請執行的記憶體空間 為了提高程式執行效率有效的利用記憶體空間,將申請記憶體空間進行了區域劃分

  1. 棧記憶體和堆記憶體
  2. 靜態區/常量區
  3. 資料區/方法區 在這裡插入圖片描述 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?

記憶體執行分析 在這裡插入圖片描述