Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
プロセスへのメモリ割り当て2-Pythonのようなナウい言語ではどうやってメモリ獲得するのか
Search
Satoru Takeuchi
PRO
July 10, 2024
1
81
プロセスへのメモリ割り当て2-Pythonのようなナウい言語ではどうやってメモリ獲得するのか
以下動画のテキストです。
https://youtu.be/aI7ancLZUTQ
Satoru Takeuchi
PRO
July 10, 2024
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
AWKへの愛を語る
sat
PRO
3
460
syncコマンドのデータ同期 完了待ちやエラー検出
sat
PRO
0
24
動作中のLinux環境の全メモリを見る
sat
PRO
1
50
Linuxの時間を10秒止める
sat
PRO
2
180
プロセスへのメモリ割り当て4 - 実際に使うときにメモリを獲得するデマンドページング(実践編)
sat
PRO
1
68
プロセスへのメモリ割り当て(3) 実際に使うときにメモリを獲得するデマンドページング
sat
PRO
1
46
プロセスへのメモリ割り当て(1) mmap
sat
PRO
2
90
サイボウズのOSPO
sat
PRO
3
270
無いはずのパーティションがある Phantom Atari Partition
sat
PRO
1
67
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
33
1.7k
Docker and Python
trallard
39
3k
Large-scale JavaScript Application Architecture
addyosmani
508
110k
Infographics Made Easy
chrislema
239
18k
The Brand Is Dead. Long Live the Brand.
mthomps
53
37k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
122
18k
How to Ace a Technical Interview
jacobian
275
23k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
RailsConf 2023
tenderlove
26
790
Designing for Performance
lara
604
68k
[RailsConf 2023] Rails as a piece of cake
palkan
44
4.6k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
354
29k
Transcript
プロセスへのメモリ割り当て(2) Pythonのようなナウい言語では どうやってメモリ獲得するのか Jul. 10th, 2024 Satoru Takeuchi X: satoru_takeuchi
1
はじめに • 前回の動画で学んだこと ◦ プロセスへのメモリ割り当てには mmapというシステムコールを使う • 疑問 ◦ Pythonのようなナウい言語はメモリやらアドレスを直接意識せずに変数を操作できる
◦ ナウい言語で変数を動的に作成すると何が起こる ? • 備考 ◦ 📝 Pythonでも抽象化された形で mmapを呼ぶことはできます 2
答え • 言語処理系が頑張って、変数を作るときに裏でmmapを呼んでいます • 雑に書くと以下のようになっている ◦ プログラム作成時に変数を格納するためのメモリ領域を一定量獲得しておく ◦ 変数が獲得されるたびに確保済みのメモリ領域を一部ずつ切り出す ◦
確保済みの領域が足りなくなれば mmapを発行して領域の数を増やす 3
Pythonの場合は? • Pythonの公式実装(CPython)はCプログラム • 処理系のメモリ獲得の方法 ◦ mmapを呼ぶ ◦ C標準のメモリ獲得関数 mallocを呼ぶ
▪ その裏側ではC標準ライブラリ(glibc)がmmapを呼んでいる 4
実機確認 • Pythonで大きなメモリ領域を獲得した際にmmapが発行されることを確認 • mem.pyプログラム ◦ メモリ獲得前であることを示すメッセージを表示する ◦ メモリ獲得後であることを示すメッセージを表示する •
mem.pyをstrace経由で動かしたとき、2つのメッセージが表示される間にmmapが 発行されるかを確認。 5
まとめ PythonスクリプトもC言語の処理系を通してmmapによってメモリを獲得 6