Pythonでのメモリ使用状況をリアルタイムで表示(初級)
Pythonプログラムのメモリ使用方法(初級)をurseraの講座で解説していたので、メモしておく。
使用サイト
・ Python Tutor - Visualize Python, Java, JavaScript, TypeScript, Ruby, C, and C++ code execution -> リアルタイムでメモリの使用状況が分かるサイト
使用スクリプト
def convert_to_minutes(num_hours): '''(int) -> int Reteurn the number of minutes there are in number >>> convert_to_minutes(2) 120 ''' result = num_hours * 60 return result minutes_2 = convert_to_minutes(2) minutes_3 = convert_to_minutes(3)
講座ので使用していたスクリプトと全く同じです。
実行してみる。
起動
Frame -> stack領域の状況を示しています。現在は、convert_to_minutes(2)のみがスタックされています(Global Frame)。
Object -> heap領域の状況。Function:convert_to_minutesのソース情報、引数情報などが格納されています。
※FrameとObjectはid(番地)によって関連づけられています。
関数の計算
num_hours、result、return valueが変数としてスタック領域に用意さる(Local Frame)。 この時それぞれの数値本体は、heap領域に存在します。変数のみがstackにあるイメージです。
数値が返る
convert_to_minutes(2)の計算が終了したことで、Local Frameが解放され、返り値のみがminutes_2に渡される。 この時、数値本体はheap領域にある。
まとめ
・stack領域は変数を用意する場所。呼び出し順を保持している。(Stackなので当たり前) ・それに対して、数値自体はheap領域に存在する。 ・stack領域の変数とheap領域の数値は別途idで結び付けられている。
これまでよく理解できていなかった、アプリ実行中にメモリの利用方法が少しわかった。