GNU GCC 最適化オプションとstrip前後のファイルサイズの比較 lsコマンド編
スポンサーリンク
GNUのGCCコンパイラでは、最適化レベル -O0 - -O3とサイズ重視の-Os、さらにバイナリのストリップ機能があります。
最適化レベルによって、生成されるバイナリのサイズが変わってきます。
ストリップ(strip)によってオブジェクトファイルのシンボルを削除することによってもファイルサイズは変わってきます。
gcc version 3.4.6 [FreeBSD] 20060305には最適化レベルには
-O0
-O1
-O2
-O3
-Os
があります。
gccに-Wl,-sをつけることでldコマンドにstripの指示を出すことができます。
今回は、lsコマンドのコンパイルオプションで最適化レベルの設定を変更したり、stripの有り無しで、できあがるバイナリサイズを比較してみました。
コンパイルコマンドは下記の通りです。
下記の図は、縦が最適化オプション、横が、stripの有無です。
コンパクトの最適化重視の-Osとstripの組み合わせが一番サイズが小さくなりました。
最適化なしでstrip無しが一番サイズが大きくなりました。
ldに-Wl,-O1で最適化オプションを指定した場合の比較もしてみました。
-Wl,-O1でldの最適化を加えるとサイズが若干大きくなります。
-fPIC(Position Independent Code)も試してみました。
最適化レベルによって、生成されるバイナリのサイズが変わってきます。
ストリップ(strip)によってオブジェクトファイルのシンボルを削除することによってもファイルサイズは変わってきます。
gcc version 3.4.6 [FreeBSD] 20060305には最適化レベルには
-O0
-O1
-O2
-O3
-Os
があります。
gccに-Wl,-sをつけることでldコマンドにstripの指示を出すことができます。
今回は、lsコマンドのコンパイルオプションで最適化レベルの設定を変更したり、stripの有り無しで、できあがるバイナリサイズを比較してみました。
コンパイルコマンドは下記の通りです。
cc -lutil cmp.c ls.c print.c util.c cc -Os -lutil cmp.c ls.c print.c util.c cc -O0 -lutil cmp.c ls.c print.c util.c cc -O1 -lutil cmp.c ls.c print.c util.c cc -O2 -lutil cmp.c ls.c print.c util.c cc -O3 -lutil cmp.c ls.c print.c util.c cc -Wl,-s -lutil cmp.c ls.c print.c util.c cc -Os -Wl,-s -lutil cmp.c ls.c print.c util.c cc -O0 -Wl,-s -lutil cmp.c ls.c print.c util.c cc -O1 -Wl,-s -lutil cmp.c ls.c print.c util.c cc -O2 -Wl,-s -lutil cmp.c ls.c print.c util.c cc -O3 -Wl,-s -lutil cmp.c ls.c print.c util.c
下記の図は、縦が最適化オプション、横が、stripの有無です。
not strip | strip | |
デフォルト | 28175 | 22748 |
-Os | 24160 | 18992 |
-O0 | 28175 | 22748 |
-O1 | 26225 | 20932 |
-O2 | 26591 | 21400 |
-O3 | 28085 | 22920 |
コンパクトの最適化重視の-Osとstripの組み合わせが一番サイズが小さくなりました。
最適化なしでstrip無しが一番サイズが大きくなりました。
ldに-Wl,-O1で最適化オプションを指定した場合の比較もしてみました。
非strip | strip | 非strip+-Wl,-O1 | strip+-Wl,-O1 | |
デフォルト | 28175 | 22748 | 28175 | 22748 |
-O0 | 28175 | 22748 | 28175 | 22748 |
-O1 | 26225 | 20932 | 26577 | 21284 |
-O2 | 26591 | 21400 | 26927 | 21736 |
-O3 | 28085 | 22920 | 28421 | 23256 |
-Os | 24160 | 18992 | 24496 | 19328 |
-Wl,-O1でldの最適化を加えるとサイズが若干大きくなります。
-fPIC(Position Independent Code)も試してみました。
非strip | strip | 非strip+-Wl,-O1 | strip+-Wl,-O1 | 非strip+-fPIC | strip+-fPIC | 非strip+-Wl,-O1+-fPIC | strip+-Wl,-O1+-fPIC | |
デフォルト | 28175 | 22748 | 28175 | 22748 | 31714 | 25292 | 32162 | 25740 |
-O0 | 28175 | 22748 | 28175 | 22748 | 31714 | 25292 | 32162 | 25740 |
-O1 | 26225 | 20932 | 26577 | 21284 | 30229 | 23940 | 30677 | 24388 |
-O2 | 26591 | 21400 | 26927 | 21736 | 30837 | 24616 | 31301 | 25080 |
-O3 | 28085 | 22920 | 28421 | 23256 | 31856 | 25688 | 32320 | 26152 |
-Os | 24160 | 18992 | 24496 | 19328 | 27729 | 21536 | 28193 | 22000 |
参照しているページ (サイト内): [2009-04-25-2]
スポンサーリンク
スポンサーリンク
いつもシェア、ありがとうございます!
もっと情報を探しませんか?
関連記事
最近の記事
- パナソニック ジェットウォッシャードルツ EW-DJ61-Wのホースの修理
- LinuxセキュリティモジュールIntegrity Policy Enforcement
- アマゾンのEcho Show 5を買ったのでレビューします
- アマゾンのサイバーマンデーはAlexa Echo Show 5が安い
- Android スマートフォン OnePlus 7T と OnePlus 7の違い
- Android スマートフォン OnePlus 7 をAndroid10にアップデートしてみた
- クレジットカードのバーチャルカードの比較のまとめ
- 活動量計 Xiaomi Mi Band 4を買ってみたのでレビュー
- Android スマートフォン OnePlus 7 のレビュー
- AliExpressでスマートフォンを買い物してみた
- パソコンのホコリ対策 レンジフードフィルターと養生テープ
- 80PLUS GOLDのPC電源ユニットAntec NeoEco 750 Goldのレビュー
- イギリスの付加価値税 VAT は払い戻しを受けられる
- イギリスのロンドンでスーツケースなど荷物を預けられる場所は
- イギリスのロンドンで地下鉄やバスに乗るならオイスターカードを使おう
- イギリスのヒースロー空港からロンドン市内への行き方
- 航空便でほかの航空会社に乗り継ぎがある場合のオンラインチェックイン
- SFC会員がANA便ではなくベトナム航空のコードシェアを試して解ったこと
- ベトナムの入国審査でeチケットの掲示が必要だった話
- シアトルの交通ICカードはオルカカード(Orca)です
人気のページ
- Windows7 IME 辞書ツールで単語の登録に失敗しました
- C言語 popen()でコマンドを実行して出力を読み込む
- Windows7で休止状態にする方法
- CentOS MySQLの起動、停止、再起動
- loggerコマンドでsyslogにエラーを出力する方法
- パソコンパーツの買取をしてくれる店のまとめ
- Java Mapの使い方 get(),put(),remove(),size(),clear()
- 楽天のRポイントカードを作ってみた
- iPhone 5 から iPhone 6 に乗り換えたのでレビュー
- netstatコマンドのステータスの意味
スポンサーリンク
過去ログ
2020 : 01 02 03 04 05 06 07 08 09 10 11 122019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12