OSX 10.5上のGCCは、デフォルトで-fPICオプションがオンになっているのはなぜですか? Afterallは、より大きく、より遅いコードを生成しないのですか?OSXのGCCのPIC
2
A
答えて
4
プログラムに非常に小さな関数がたくさんある場合(グローバル変数または静的変数を使用する場合、またはobjective-cの場合、パフォーマンスの低下またはサイズの差は目立たない) PICは、スタックを使用して既にアクセスされているため、自動ローカル変数には使用されません。それを必要とする機能では、セットアップでは4つの命令しか必要としません。これは機能のコードとあまり比較されません。 PICを使用する各アクセスは、それがない場合のアクセスより1バイトだけ長いので、あまり差はありません。
64ビット用にビルドしている場合、PICはおそらくより小さくなり、パフォーマンスの差はほとんどありません。 x86-64アーキテクチャでは、新しい命令相対アドレッシングが追加されました。つまり、PICに必要なセットアップはありません。この新しいアドレッシングモードは、実際には、SIBバイトが使用されていないため、命令の絶対アドレスをエンコードするより1バイト短くなります。
最後に、PICを使用するとコードがより安全になります。毎回同じ場所にコードをロードする必要がある場合、誰かが重要な関数とデータの場所を見つけ出し、実行時に問題を引き起こす可能性があります。しかし、OSがコードを別のアドレスにロードすることを選択できる場合、問題を起こそうとする人は、プログラムが実行されるたびに関数とデータ構造がどこにあるかを調べなければなりません。
関連する問題
- 1. OSX 10.8.5:gccが
- 2. 通常のgccとMac OSX gccの違いは?
- 3. Mac OSX Lion、virtualenv、pil install - gccエラー
- 4. PICマイクロコントローラのオペレーティングシステム
- 5. ジキルのインストールにはOSXでGCCが必要ですか?
- 6. OSXのGCC 5,6,7は、uintをサポートしていません。
- 7. PIC用mikroCを使用したPICマイクロコントローラのタイマベース割り込み
- 8. OS X、OSX、GCC、現代のx86の場合はgcc、x86の、セグメンテーション、ページング、ワンセグ障害、バスエラー
- 9. 中断PIC CCS
- 10. は、3D CAPTCHA [PIC]
- 11. データのPIC I2CスレーブACK
- 12. PIC /アセンブリ、アセンブリ内のレジスタ
- 13. OSX上でpipにGCCを使用させるには?
- 14. Mac OSXはgcc 6.2.0を使用していますが、g ++ 4.9.2
- 15. I2cスレーブデータPIC MPLAB X
- 16. Invensense IMU3000 with microcontroller PIC
- 17. PIC上の複数のPWMチャネル
- 18. PIC/PIEバイナリ内のグローバルシンボルテーブル(GOT)のアドレス
- 19. osxでgccを使用してallegro5プログラムをコンパイルする際のエラー
- 20. PICプログラミング割り込みの誤動作。
- 21. MPLAB(PIC開発)の無料代替
- 22. PICバックエンド:16ビットレジスタ/戻り型
- 23. PIC 18f4685とHitatchi 44780 LCD
- 24. gccにPICコードで直接関数を呼び出させるにはどうしたらいいですか?
- 25. PIC以外のオブジェクトをPICオブジェクトの実行可能ファイルにリンクすることは可能ですか
- 26. GCC 4.6を使用してコンパイルされたOSXアプリケーションをデプロイする
- 27. OSX - GCC/Clang - rpathで動的非標準ライブラリ/フレームワークパスを設定するには?
- 28. OSX 10.8、Xcode 4.4 Makeとgccを環境から外しました
- 29. condition_variableとunique_lockを使って周期的クラッシュを引き起こす(GCC 4.7、OSX)
- 30. %GCCのPowerPC GCCレジスタの印刷