HOME»基本情報技術者試験掲示板»28年 春 問8 アルゴリズム
投稿する
28年 春 問8 アルゴリズム [2036]
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の値が
残ったままではないでしょうか?
これは、まあほんとに回答には関係ないので「そこは触れずに答えてください」
という意図なんでしょうか?それとも自分の勘違いですか?
問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になります。
このようにして、メモリーが有効利用されるという訳です。
値は(もっと言えば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さん(No.3)
★FE ゴールドマイスター
確かに内容自体は残っていますが、DataLen 以降は空き扱いになるので問題ありません。
古い内容が参照されることはないし、追加や編集の際にはどうせ上書きされるので、内容を消すのは処理が増えるだけで無駄ということです。
ディスクの論理フォーマットでは、参照されなくなるけれどもデータは残っている、
でも空き扱いなのでやがて新しいデータで上書きされていく、
という話と同じです。
・・・ああ、そうか。clearGarbageって、デフラグか。
古い内容が参照されることはないし、追加や編集の際にはどうせ上書きされるので、内容を消すのは処理が増えるだけで無駄ということです。
ディスクの論理フォーマットでは、参照されなくなるけれどもデータは残っている、
でも空き扱いなのでやがて新しいデータで上書きされていく、
という話と同じです。
・・・ああ、そうか。clearGarbageって、デフラグか。
2019.10.19 10:04
will1101さん(No.4)
ゆいまさん、QMさん、お返事ありがとうございます。
なるほど、上書きされるんですね。確かに。
お二人のおかげですっきりしました。
ありがとうございます。
なるほど、上書きされるんですね。確かに。
お二人のおかげですっきりしました。
ありがとうございます。
2019.10.19 15:35