Compiler Explorerは、オンライン上でC/C++等のコードをコンパイルし、アセンブラ出力をリアルタイムで確認できる便利なサイトです。


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

この記事のコメント欄にて 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へアクセスしてください。 こんなサイトが表示されたかと思います。

Compiler Explorerのデフォルト画面でsquare関数のコードとアセンブラ出力

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

実際に使ってみよう

さて、実際に使って見ましょう。サンプルコードは C言語のコードをアセンブラ出力を確認しながら最適化する で使ったものを使います。

最適化オプションO0とO2でのアセンブラ出力比較

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

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

細かい使い方は実際に触ってればすぐわかると思います。わからなかったら、アイコンの上にマウスオーバすると説明がポップアップするので大丈夫です。

まとめ

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