Slide 1

Slide 1 text

プロセスへのメモリ割り当て(2) Pythonのようなナウい言語では どうやってメモリ獲得するのか Jul. 10th, 2024 Satoru Takeuchi X: satoru_takeuchi 1

Slide 2

Slide 2 text

はじめに ● 前回の動画で学んだこと ○ プロセスへのメモリ割り当てには mmapというシステムコールを使う ● 疑問 ○ Pythonのようなナウい言語はメモリやらアドレスを直接意識せずに変数を操作できる ○ ナウい言語で変数を動的に作成すると何が起こる ? ● 備考 ○ 📝 Pythonでも抽象化された形で mmapを呼ぶことはできます 2

Slide 3

Slide 3 text

答え ● 言語処理系が頑張って、変数を作るときに裏でmmapを呼んでいます ● 雑に書くと以下のようになっている ○ プログラム作成時に変数を格納するためのメモリ領域を一定量獲得しておく ○ 変数が獲得されるたびに確保済みのメモリ領域を一部ずつ切り出す ○ 確保済みの領域が足りなくなれば mmapを発行して領域の数を増やす 3

Slide 4

Slide 4 text

Pythonの場合は? ● Pythonの公式実装(CPython)はCプログラム ● 処理系のメモリ獲得の方法 ○ mmapを呼ぶ ○ C標準のメモリ獲得関数 mallocを呼ぶ ■ その裏側ではC標準ライブラリ(glibc)がmmapを呼んでいる 4

Slide 5

Slide 5 text

実機確認 ● Pythonで大きなメモリ領域を獲得した際にmmapが発行されることを確認 ● mem.pyプログラム ○ メモリ獲得前であることを示すメッセージを表示する ○ メモリ獲得後であることを示すメッセージを表示する ● mem.pyをstrace経由で動かしたとき、2つのメッセージが表示される間にmmapが 発行されるかを確認。 5

Slide 6

Slide 6 text

まとめ PythonスクリプトもC言語の処理系を通してmmapによってメモリを獲得 6