當前位置:ag真人国际官网-ag旗舰厅官方网站 » 編程軟體 » 編譯器優化有幾種

編譯器優化有幾種-ag真人国际官网

發布時間: 2024-11-17 13:11:58

❶ 百度app ios端包體積50m優化實踐(七)編譯器優化

網路app ios端包體積優化系列文章深入探討了包體積優化的整體方案、圖片優化、資源優化、代碼優化、無用類優化、heic圖片優化實踐以及無用方法清理。本篇將著重於編譯器優化在網路app實踐中的應用。



編譯器優化



編譯器優化包括gcc語言編譯優化、swift編譯優化、lto優化、剝離調試符號、剝離符號表、剔除未引用的代碼、asset優化、c 虛函數優化和三方sdk編譯器方向瘦身。



2.1 方案綜述

2.2 gcc語言編譯優化



2.2.1 綜述



通過gcc編譯優化,可以生成體積更小的二進制產物,對objective c、c、c 均有效。



2.2.2 objective c 編譯優化

在xcode中編輯和編譯objective c 代碼時,優化配置路徑為:build settings -> apple clang -> code generation。可選參數包括:



默認優化等級為-os,但我們使用-oz優化方式。wwdc 2019《what's new in clang and llvm》詳細解釋了這種優化原理,它通過識別跨函數的相同代碼序列減少代碼大小。重復的連續機器指令被外聯為函數,原始代碼序列被替換為外聯函數,雖然增加函數調用棧深度,但在當前高配置的iphone設備上,這種性能損失是可以接受的。



實踐表明,編譯優化參數 -oz對objective c 代碼有10%體積收益,對c和c 代碼有30%收益。



2.2.3 c/c 編譯優化

對於底層模塊(如網路庫、播放內核、視覺處理和端智能),常使用c和c 實現。這些模塊支持跨平台,採用cmake和gn編譯。對於c 語言,cppflags選項設置為'-oz';對於c語言,cflags選項設置為"-oz"。



2.3 swift編譯優化

swift優化包括optimization level和compilation mode,配置路徑為:build settings -> swift compiler -> code generation。



optimization level可選參數值有:optimize for size,其核心原理與gcc語言編譯優化類似,通過外聯和復用重復的連續機器指令降低大小。compliation mode可選參數值有:optimize for size[-osize]和whole mole,同時開啟可減少10%的swift包體積大小。



2.4 lto優化

lto是蘋果官方提出的一種優化策略,通過在鏈接階段進行跨模塊優化,減少代碼大小和提高執行效率。配置路徑為:build settings -> apple clang -> code generation -> link-time optimization,設置為incremental。



lto優化體現在:函數內聯化、去除無用代碼、全局優化。但負面影響包括:降低link map的可讀性、增加編譯和鏈接時間。



2.5 剝離調試符號

默認設置symbols hidden by default為yes,可減少包大小。動態庫設置為no,否則會引發鏈接錯誤。



2.6 剝離符號表

配置路徑為:build settings -> strip linked proct。選擇屬性值為yes。



strip linked proct用於去除不必要的符號信息,去除後只能使用dsym文件進行符號化,因此需將"debug information format"修改為"dwarf with dsym file"。



2.7 剔除未引用的代碼

配置路徑為:build settings -> dead code stripping。選擇屬性值為yes。



該優化主要在鏈接時剔除c、c 、swift等靜態語言的無用代碼,但在處理objective-c時無效,因其基於runtime機制編譯。



2.8 asset優化

配置路徑為:build settings -> asset catalog compiler -> optimization。選擇space以優化包大小,收益較小。



2.9 c 減少虛函數的使用

減少虛函數使用可減少虛函數表佔用空間,最終減小程序包大小。



2.10 三方sdk編譯器瘦身

需對每個框架進行優化配置和微調,確保庫和依賴項也正確配置,以確保與編譯器優化兼容。



網路app內部集成了眾多第三方sdk,需優化sdk以實現應用瘦身。



指令集架構優化



支持arm64和x86_64架構,通過優化指令集架構減小上傳到appstore的包體積。



3.2 指令集架構設置

使用lipo命令從舊的framework中拆分指定架構的二進制文件,合並後替換老的framework的mach-o文件。



3.3 去除無用架構

通過驗證abcarm64和abcarmx86_64架構信息。



xcode升級優化



蘋果xcode版本持續優化,如xcode 14,提供更強大的並行編譯能力,顯著提高構建速度,優化包體積。



swift內置動態庫優化



自2014年發布以來,swift語言發展迅速,成為ios開發的首選語言。優化swift內置動態庫,只需將app支持的最低版本修改為12.2。



優化後,網路app包體積減少30m ,提交appstore後,有顯著收益。



編譯器優化在網路app包體積優化中的roi最高,但影響范圍廣泛。通過實踐,成功減少了30m的包體積,實現了自身庫的全部收益,同時優化了前15個三方sdk。



總結了網路app的編譯器優化方案,包括多種優化手段,後續將繼續深入探討其他優化方法。

❷ arm c語言編程優化策略(keil平台)

arm c語言在keil平台上的編程優化策略主要包括編譯器選項、循環優化、內聯函數、volatile關鍵字使用、純凈函數、數據對齊、c99特性、棧和寄存器管理、編譯器特性以及鏈接器應用。以下是對這些內容的概述:

1. 編譯器優化選項:keil提供了不同等級的優化設置,如最小優化便於調試,有限優化在保持一定調試信息的同時減少代碼體積,高度優化可能影響代碼執行流程,而最大程度優化則犧牲調試信息以換取更高的執行效率。循環展開、內聯函數的使用和控制,以及volatile關鍵字的正確使用都是優化策略的關鍵部分。

2. c循環優化:循環條件和展開的處理對代碼體積和執行速度有直接影響。使用-o3優化等級時,編譯器會自動進行適度的循環展開。

3. 內聯函數:內聯函數是代碼體積與性能之間的權衡。編譯器會根據優化等級和函數特性決定是否內聯,使用__inline等關鍵字可以影響這一過程。

4. volatile關鍵字:在優化等級較高時,volatile可以防止未定義行為,尤其是在中斷、多線程和寄存器讀取中,需確保正確使用。

5. 純凈函數和數據對齊:利用純凈函數和自然對齊的特性,可以優化代碼執行效率,減少不必要的變數訪問

6. c99特性:支持更易用的循環和結構體賦值,但需注意動態數據的使用限制和棧管理。

7. 鏈接器應用:理解section訪問和函數替換技術,如$super$$和$sub$$,有助於在鏈接階段進行代碼定製。

深入理解並靈活運用這些策略,可以有效提升在keil平台上的arm c語言程序性能和效率。

❸ 應用編譯優化三種模式

應用編譯優化三種模式分別是:編譯時間優化模式、執行時間優化模式和代碼大小優化模式。
1、編譯時間優化模式:關注編譯速度的提升,以縮短應用程序高脊的編譯時間為目標。在這種模式下,編譯器會減少編譯時間,會降低應用程序的執行效率。
2、執行時間優化模式:關注應用程序的執行效率,以提高應用程序的性能為目標。在這種模式下,編譯器會優化應用程序的代碼,以提高執行效率,會增加編譯時間。
3、代碼大小優化模式:關注應用程序的大小,以減小應兆培用程序的體積為目標。族念唯在這種模式下,編譯器會減小應用程序的代碼大小,以減小應用程序的體積,會降低應用程序的執行效率。

熱點內容
vb資料庫數組 發布:2024-11-19 09:23:40 瀏覽:827
安卓游戲數據保存在哪裡找 發布:2024-11-19 09:22:02 瀏覽:309
解壓出來的文件亂碼 發布:2024-11-19 09:15:40 瀏覽:939
北航ftp是多少 發布:2024-11-19 09:15:32 瀏覽:821
瀏覽保存密碼如何取消 發布:2024-11-19 09:10:17 瀏覽:89
安卓怎麼關簡訊重復提醒 發布:2024-11-19 09:02:00 瀏覽:635
html與php的區別 發布:2024-11-19 09:00:53 瀏覽:193
晚安密碼多少 發布:2024-11-19 09:00:51 瀏覽:945
易語言腳本模塊 發布:2024-11-19 09:00:44 瀏覽:484
經典矩陣c語言 發布:2024-11-19 08:56:23 瀏覽:268
网站地图