編譯器優化有幾種-ag真人国际官网
❶ 百度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、代碼大小優化模式:關注應用程序的大小,以減小應兆培用程序的體積為目標。族念唯在這種模式下,編譯器會減小應用程序的代碼大小,以減小應用程序的體積,會降低應用程序的執行效率。