誰かが私にバイナリストリッピングを説明できますか?どのくらい効果的です(バイナリをどれくらい減らすことができますか)。どのようにそれを適用しますか?バイナリストリッピングを簡単に
答えて
実際には2種類のストリッピングがあります。
バイナリを削除するは、バイナリのシンボルテーブルから不要なシンボルを削除します。シンボルテーブルには、プログラム内のすべてのオブジェクトの名前とデバッグ情報が含まれています。これは、プログラムがシンボルテーブルを介して通常は独自の関数にアクセスしないため、プログラムを実行するためには必要ありません。
シンボルテーブルは、プログラムがクラッシュしたときに便利なデバッグ情報を提供するので、プログラムがクラッシュしたときに呼び出された関数を示すバックトレースを取得できます。シンボルを削除すると、バックトレースにはメモリアドレスだけが含まれますが、関数名は含まれません。デバッグしているアプリケーションを削除しないでください。
バイナリを削除すると、実行可能ファイルをリバースエンジニアリングするのがやや難しくなりますが、私はあなたがその編集性ではないことを望んでいます。
バイナリを削除しても、プログラムが高速に読み込まれるわけではありません。シンボルテーブルは、プログラムがクラッシュした場合にバックトレースに必要でない限り、メモリにロードされません。
strip
コマンドを使用してコマンドラインからバイナリを削除することができます。私はXcodeからこれをどのように起動するかについてはあまりよく分かりません。ストリッピング
strip MyExecutable
デッドは、コードから未使用の関数やデータを削除する別のプロセスです。これはバイナリが作成されるリンク段階で発生します。これにより、コードのサイズが小さくなる可能性があります。違いは、使用していないデータがプログラムにどれくらいあるかによって異なります。それはたくさんあるかもしれませんし、まったく何もないかもしれません。デッドストリップを使用すると、ホットコードのローカリティが向上するため、アプリケーションを非常にわずかに高速化できます。 (大きな違いがある場合は、アプリケーションに深刻な問題があります)
デッドストリッピングの一般的な欠点はありませんので、私は常にオンにします。デッドストリッピングを有効にするには、リンカーフラグ-dead_strip
に対応するXcodeを使用します。
gcc -o MyExecutable -Wl,-dead_strip ....
注:別のサブセクションで各機能を置くことによってデッドストリッピング作品。アセンブリファイルを記述する場合は、.subsections_via_symbols
ディレクティブを使用して各シンボルを別々のサブセクションに配置し、個々のシンボルをリンカがデッドストリップできるようにすることができます。 GCCは、私が知る限り、そのアセンブリの出力に常にその指令を生成します。
参考文献:
- 1. 簡単にアクセス
- 2. 簡単にカウントダウン
- 3. 簡単
- 4. 私は簡単に
- 5. 私は簡単に
- 6. は、簡単にアクセス
- 7. jsonで簡単に印刷する方法簡単なJavaライブラリ
- 8. が簡単に値に
- 9. が簡単ライブラリパッケージ
- 10. 簡単! Labviewレースコンディション
- 11. 簡単なラムダコード
- 12. は簡単
- 13. 簡単なブレッドクラムバーサンプル
- 14. 簡単なフォーム
- 15. JSON-簡単containerFactory
- 16. Swiftで簡単に配列に画像を追加する(簡単な方法)
- 17. CSS3、簡単にボタンを押して簡単にする方法は?
- 18. 私のC++デモをiPhoneに簡単に置くことは簡単ですか?
- 19. クイズPythonで簡単で簡単なモードを作成する
- 20. ActionScript 2.0で簡単にドラッグスロー
- 21. Flaskで簡単にfor-loop
- 22. 非常に簡単なテストライブラリ
- 23. は、簡単に言うと
- 24. HERESに簡単な例リスト
- 25. AWS EC2インスタンススケジューラーは簡単に
- 26. Azureの、簡単にテーブル、UWP
- 27. 簡単に更新支援
- 28. コアデータの取得を簡単に行うための簡単な方法
- 29. 簡単な反応+還元アプリを簡単に作成できますか?
- 30. 私の簡単なPHPプロジェクトに簡単なxmlrpc_clientライブラリを含める方法
だから、死んストリッピングは、合計ファイルサイズを削除しますか? – theUser
決して呼び出さない関数や、決して使用しないデータを記述すると、ファイルサイズが小さくなります。その差はおそらく非常に小さく、ゼロであり、非常に大きくなる可能性があります。あなたのアプリケーションによって異なります。また、ロード時間や実行時のパフォーマンスにも影響しますが、ごくわずかです(通知するには小さすぎます)。 –
ええええええええええええええええええええええええええなたください、これらの設定は、あなたがリリース用のコンフィギュレーションで事前にセットアップしたみらいです。だから私は何も最適化することはできません。まあ、とにかくありがとう。また、知識が豊富なので、これを手伝うことができますか?http://stackoverflow.com/questions/9230550/how-big-are-the-armv6-and-armv7-architectures#comment11636946_9230550 – theUser