2
爲什麼OSX 10.5上的GCC默認打開-fPIC選項?畢竟,它不會產生更大更慢的代碼嗎?OSX的GCC上的PIC
爲什麼OSX 10.5上的GCC默認打開-fPIC選項?畢竟,它不會產生更大更慢的代碼嗎?OSX的GCC上的PIC
除非你的程序有很多非常小的函數,所有這些函數都使用全局或靜態變量,或者objective-c,否則任何性能下降或大小差異都將不明顯。 PIC不用於自動局部變量,因爲它們已經使用堆棧進行訪問。在需要它的功能中,設置只需要四條指令,與函數中的代碼相比並不多。使用PIC的每個訪問僅比沒有它的訪問長一個字節,所以再次沒有太大的區別。
如果您正在構建64位,PIC可能會更小,並且可能沒有性能差異。 x86-64架構增加了一種新的與指令相關的尋址,這意味着PIC不需要進行設置。由於不使用SIB字節,因此這種新的尋址模式實際上比編碼指令中的絕對地址短一個字節。
最後,使用PIC使您的代碼更安全。如果你的代碼每次都要在同一個地方加載,那麼有人可能會在運行時發現重要函數和數據的位置並導致問題。但是,如果操作系統可以選擇將代碼加載到不同的地址,任何試圖引發問題的人都必須在每次運行程序時找出函數和數據結構的位置。