From 9fe5e9aff4a99a60d36ad15f40283d19600383f6 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sat, 22 Feb 2025 11:35:22 +0900 Subject: update --- slides.pdf | Bin 492124 -> 466281 bytes slides.saty | 70 ++++++++++++++++++++++++++++++++---------------------------- 2 files changed, 37 insertions(+), 33 deletions(-) diff --git a/slides.pdf b/slides.pdf index 60f680e..be1cd96 100644 Binary files a/slides.pdf and b/slides.pdf differ diff --git a/slides.saty b/slides.saty index 271dd89..1dff17d 100644 --- a/slides.saty +++ b/slides.saty @@ -75,13 +75,13 @@ document '< +frame{はじめに}< +p{ - メモリの容量は増え続けている + (長期的・平均的には) メモリの容量は増え続けている } > +frame{はじめに}< +p{ - メモリの容量は増え続けている + (長期的・平均的には) メモリの容量は増え続けている } +p{} +p{ @@ -129,7 +129,7 @@ document '< } +p{} +p{ - 必要なメモリのサイズを要求する + 必要なサイズのメモリを要求する } > @@ -225,7 +225,13 @@ document '< } +p{} +p{ - 参照されている数を数える + 自分を参照している別のオブジェクトの数 (参照カウント) を数えておく + } + +p{ + 参照が増えたらカウントアップ + } + +p{ + 参照が減ったらカウントダウン } +p{ ゼロになったら解放する @@ -242,16 +248,16 @@ unset($a); `#); > - +frame{参照カウント}< - +code-block-php(`$a = ["foo"]; -$b = ["bar"]; -$a[] = $b; -unset($b); -unset($a); - -`#); - +fig-abs-pos((127mm, 40mm))(include-image 127mm `assets/rc_1.png`); - > +% +frame{参照カウント}< +% +code-block-php(`$a = ["foo"]; +% $b = ["bar"]; +% $a[] = $b; +% unset($b); +% unset($a); +% +% `#); +% +fig-abs-pos((127mm, 40mm))(include-image 127mm `assets/rc_1.png`); +% > +frame{参照カウント}< +code-block-php(`$a = ["foo"]; @@ -264,16 +270,16 @@ unset($a); +fig-abs-pos((127mm, 40mm))(include-image 127mm `assets/rc_2.png`); > - +frame{参照カウント}< - +code-block-php(`$a = ["foo"]; -$b = ["bar"]; -$a[] = $b; -unset($b); -unset($a); - -`#); - +fig-abs-pos((127mm, 40mm))(include-image 127mm `assets/rc_3.png`); - > +% +frame{参照カウント}< +% +code-block-php(`$a = ["foo"]; +% $b = ["bar"]; +% $a[] = $b; +% unset($b); +% unset($a); +% +% `#); +% +fig-abs-pos((127mm, 40mm))(include-image 127mm `assets/rc_3.png`); +% > +frame{参照カウント}< +code-block-php(`$a = ["foo"]; @@ -532,7 +538,7 @@ unset($a); ほとんどのオブジェクトは参照カウントで解放される } +p{ - 全オブジェクトを走査しなくていい + 循環参照だけ考えればいい } > @@ -542,10 +548,10 @@ unset($a); } +p{} +p{ - 循環参照「かもしれない」オブジェクトを登録しておく + 循環参照「かもしれない」オブジェクトをルートバッファに登録しておく } +p{ - そのオブジェクトとそこから辿れるオブジェクトだけ走査する + ルートバッファから本物の循環参照を探す } > @@ -557,9 +563,8 @@ unset($a); +p{ 循環参照「かもしれない」オブジェクト } - +p{} +p{ - refcount を減らしたときに 0 にならなかったもの + 参照カウントを減らしたときに 0 にならなかったもの } +p{ 循環参照は、間接的に自分で自分を指している @@ -572,8 +577,7 @@ unset($a); } +p{} +listing{ - * 循環参照かもしれないオブジェクトをルートバッファへ登録する - * ルートバッファから辿れる全オブジェクトの refcount を 1減らす + * ルートバッファから辿れる全オブジェクトの参照カウントを 1減らす } > @@ -598,8 +602,8 @@ unset($a); +p{} +listing{ * すべてのルートバッファから辿れるオブジェクトについて、 - ** refcount が 0 でないなら1増やす - ** refcount が 0 なら解放する + ** 参照カウントが 0 でないなら1増やす + ** 参照カウントが 0 なら解放する * 処理後はルートバッファから取り除く } > -- cgit v1.2.3-70-g09d2