超便利!C言語のアセンブラ出力を即確認できるサイト|compiler-explorer

どうも、ながやすです。

先日、「C言語のコードをアセンブラ出力を確認しながら最適化する」という記事を投稿しました。このときアセンブラ出力は実際にgccを使ってアセンブラを出力していました。

C言語のコードをアセンブラ出力を確認しながら最適化する
組込みではコスト削減のためにCPUやメモリが貧弱な場合があります。また、コンパイラが最適化を完璧にできるとは限りません。そこで今回は、自分でアセンブラ出力を見ながらC言語を最適化する例をループ処理にて示します。

この記事のコメント欄にて buchio さんから素晴らしく便利なサイト compiler-explorer をお教えいただきましたので、ご紹介いたします。buchioさん、ありがとうございます!

スポンサーリンク

compiler-explorer とは

その便利サイトとは、Web上ですぐにC言語をアセンブラにしてくれる compiler-explorer です。どんなサイトかを GitHub の Wiki からの抜粋します。

Compiler Explorer is an interactive tool that lets you type code in one window and see the results of its compilation in another window.

ものすごくざっくりと意訳するとこんな意味ですね。

Compiler Explorer は入力されたコードのコンパイル結果をその場で表示するよ!

より詳細な説明は README を参照してください。現時点(2017-02-16)で C/C++、Rust、D言語、Go言語 に対応しているようです。

どんなものか見てみよう!

まず compiler-explorer へアクセスしてください。こんなサイトが表示されたかと思います。

サンプルコードとして引数を二乗する関数 square が書かれていますね。左のウィンドウにC言語のコード、右にコンパイル結果のアセンブラがあります。コンパイラは x86-64 gcc 6.3 に設定してありますね。このように、基本的な使い方は、左のウィンドウにC言語のコードを書いて右側のアセンブラを確認する、となります。

実際に使ってみよう!

さて、実際に使って見ましょう。サンプルコードは 前回の記事 のサンプルコードを使います。

これが実行結果です。今回はウィンドウが3つありますね。左はC言語、真ん中は最適化オプションが -O0、右側は最適化オプションが -O2 です。このように、1つのC言語のコードに対し同時にいろんなコンパイラオプションでのアセンブラを同時に表示できます!一目で最適化が効いているのがわかりますね!

C言語のコードとアセンブラの対応もわかるようになっています。左のC言語のウィンドウの背景色が緑、黄、紫、赤の4色ありますね。真ん中のアセンブラも緑、黄、紫、赤の4色ありますね。それぞれC言語の同じ背景色に対応しています。どこのコードがどのようにコンパイルされたか一目でわかります!また、右の最適化をかけたアセンブラは背景色が黄、赤の2色しかありません。最適化により緑と紫のC言語コードが削除されたことを示しています。

細かい使い方は実際に触ってればすぐわかると思います。分からなかったら、アイコンの上にマウスオーバすると説明がポップアップするので大丈夫です。よく使うだろうものについては、赤枠で注記を入れておきました。見たまんまですが、この結果をシェアするときは気をつけてください。ブラウザのアドレスバーをコピーしてもこの結果はシェアできません。左上にある赤枠「この状態のURLを取得」のところをクリックしてくださいね

まとめ

今回はWeb上ですぐにC言語をアセンブラにしてくれるサイト compiler-explorer を紹介しました。同時に複数の最適化オプションの結果を表示したり、どのC言語コードがどのアセンブラに対応するかなど一目でわかります!
実行速度やコードサイズがシビアな環境で開発している人にとってはとても役立つサイトだと思います!ぜひご活用くださいませ!