28年  春  問8  アルゴリズム

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
will1101さん  
(No.1)
https://www.fe-siken.com/kakomon/28_haru/pm08.html
問8最終ページ(39)
設問g  DataLen  の値  ですが、
答えは導き出せたものの、疑問が残ります。

clearGarbage()のアルゴリズムは
大雑把に言えば生きてるデータだけ抽出してtempに格納し、
それをData[]に戻すと解釈してます。

トレースをすればDataLenの保持している値は13と出るので回答には全く関係ないのですが、
例えば図6の状態(DataLen = 23 )からclearGarbage()を実行しても
DataLenの値は13になるけども実際のData[]の中身は添え字13~22の値が
残ったままではないでしょうか?
これは、まあほんとに回答には関係ないので「そこは触れずに答えてください」
という意図なんでしょうか?それとも自分の勘違いですか?
2019.10.19 03:11
ゆいまさん 
(No.2)
もちろんwill1101さんの言われるように、Data[13]からData[22]の
値は(もっと言えばData[23]とData[24]の値も)残ったままですが、
clearGarbage()の終了時にDataLenが13になっておれば、「これらの
値はもう使われない」ということを意味します。
つまり、これらは実際に消去しなくても、消去されたと同然ということです。
従って、例えば、そのあとでaddMemo(4,"Aoki")を実行すると、
Data[13]からData[17]に、4, A, o, k, i が「上書き」され、
DataLenが18になります。
このようにして、メモリーが有効利用されるという訳です。
2019.10.19 09:49
QMさん 
FE ゴールドマイスター
(No.3)
確かに内容自体は残っていますが、DataLen 以降は空き扱いになるので問題ありません。
古い内容が参照されることはないし、追加や編集の際にはどうせ上書きされるので、内容を消すのは処理が増えるだけで無駄ということです。

ディスクの論理フォーマットでは、参照されなくなるけれどもデータは残っている、
でも空き扱いなのでやがて新しいデータで上書きされていく、
という話と同じです。
・・・ああ、そうか。clearGarbageって、デフラグか。
2019.10.19 10:04
will1101さん  
(No.4)
ゆいまさん、QMさん、お返事ありがとうございます。

なるほど、上書きされるんですね。確かに。
お二人のおかげですっきりしました。
ありがとうございます。
2019.10.19 15:35

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop