[30日でできる!OS自作入門](https://tatsu-zine.com/books/make-your-own-os-in30days">30日でできる! OS自作入門)を読んでいます。
今まで上位レイヤーのプログラミング(OSの上で動くプログラム開発)しかしたことがなかったので、色々新鮮で面白いです。
9日目を読んでいるのですが、マシンに乗っているメモリ容量を調べるコードで以下のような実装になっています。
1. メモリの値を保持する(あとで元に戻すため)
2. メモリに値を書きこむ
3. 上記の値を反転させる
4. 反転したか確認
5. 再度反転させる
6. 元に戻ったか確認
7. メモリの値を元に戻す
8. 1〜7を繰り返し
メモリに値を書き込んで結果が正しかったら、そのメモリが存在すると判断するコードです。
しかし、実際に実行してみると、思い通りの結果になりません。(メモリが想定よりも多いと判断されてしまう)
なぜそうなるのか調べてみると、コンパイラが最適化を行ったために、実際に書いたコードとコンパイルされた結果が異なっていました。
コンパイラからすると結局何もしていないので、ただループして結果を返すように最適化していたようです。
無駄なコードを判断して最適化したコンパイラが純粋に凄いと思いました。
また、それを突き止めるためにコンパイルした結果をアセンブラで確認するのが凄いと思いました。
アセンブラが読めるとこんなところで役に立つのかと思いました。
0 件のコメント :
コメントを投稿