主頁 >  其他 > 今日頭條 iOS 安裝包大小優化 - 新階段、新實踐

今日頭條 iOS 安裝包大小優化 - 新階段、新實踐

2021-02-03 14:00:01 其他

前言

今日頭條 iOS 端從 2016 年起就關注到了安裝包大小的問題,并啟動了包大小優化,2017 年,我們將當時的經驗發表為技術文章 《干貨|今日頭條iOS端安裝包大小優化—思路與實踐》[1],

如今三年過去了,今日頭條在繼續探索包大小優化時實踐了更多思路,包括構建配置、圖片壓縮、__TEXT 段遷移、二進制段壓縮等,這些優化項在業務入侵較少的前提下給今日頭條帶來了顯著的包大小收益,同時,整個業界在包大小優化上也產出了更多方案,因此我們更新文章,期待與大家共同交流包大小優化這件事,

表格:今日頭條落地的優化項和收益一覽

一、安裝包的構成

當我們通過構建,獲得了一個經過了 App Slicing 后的 ipa 檔案后,將其用 zip 解壓縮方式解壓,進入 .app 檔案后,我們就可以直觀地看到安裝包中的內容,

一個安裝包,往往包含資源與 iOS 上的可執行檔案 Mach-O 檔案兩部分,資源又可以分為 Asset Catalog 的構建產物 Assets.car 檔案和其他資源,其中 Assets.car 檔案和 Mach-O 檔案,是我們投入較多精力優化的部分,

1.1、Assets.car 檔案

Assets.car 檔案是工程中 Asset Catalog 的構建產物,Xcode 工具鏈中的 actool 負責構建 Assets.car,在構建 Assets.car 的程序中,actool 會按照一定策略選取編碼演算法,對其中的 png 圖片重新編碼,

圖:Asset Catalog

1.2、Mach-O 檔案

Mach-O 檔案是 iOS 上的可執行檔案,它是由代碼源檔案經過編譯和靜態鏈接獲得,經過 App Slicing 之后的 Mach-O 檔案往往僅包含單個架構,使用 MachOView 等工具,我們可以直觀了解 Mach-O 中包含的內容,

同時,Link Map 檔案能更進一步幫助我們分析 Mach-O 檔案的構成,

在 Build Settings 中打開 LD_GENERATE_MAP_FILE 開關,構建 App 的程序中就會生成一個名叫 Link Map 的 txt 檔案,它能展示每個段、每個節、每個函式在 Mach-O 中的分布和大小,這些資訊是包大小優化中經常使用的,

二、資源大小優化

“壓縮資源”往往是最容易被聯想到的包大小優化方案,但實際操作起來,卻也包含技巧,今日頭條在資源優化上做了諸多嘗試,

2.1、使用合適的資源壓縮配置

今日頭條目前最低支持的 iOS 系統版本為 iOS 9,然而,大部分 Pod 庫的 Podspec 檔案中指定的deployment_target(最低支持版本)由于未及時修改,依然還是 iOS 8,這就導致了這些 Pod 庫中指定的 resource_bundles 在構建出 Assets.car 時,是以 iOS 8 為最低支持版本的,

我們通過實驗發現:

1、將 Pod 庫和主工程的最低支持版本從 iOS 8.0 提升成 iOS 9.0

2、開啟 Pod 庫和主工程 Xcode Build Settings 中的 ASSETCATALOG_COMPILER_OPTIMIZATION space 選項

這兩項設定可以改變 actool 構建 Assets.car 時選取的編碼壓縮演算法,減小包大小,我們可以使用 xcrun assetutil --info Assets.car 命令檢查 Assets.car 中每張圖片使用的編碼壓縮演算法,在今日頭潭訓境下,整理的結果如下:

由于 Assets.car 中 png 圖片的編碼壓縮演算法得到了改變,這兩項配置在今日頭條落地時獲得了 2.31MB 的包大小收益,

2.2、使用 RGB with palette 壓縮圖片

在今日頭條投入包大小優化的早期,我們曾嘗試對 Asset Catalog 中的 png 圖片做無損壓縮,但實踐后發現,雖然放入 Asset Catalog 的圖片大小有了明顯減小,但是構建的產物的大小卻幾乎沒有變化,

經過探究,我們發現,Xcode 中,構建 Asset Catalog 的工具 actool 會首先對 Asset Catalog 中的 png 圖片進行解碼,得到 Bitmap 資料,然后再運用 actool 的編碼壓縮演算法進行編碼壓縮處理,無損壓縮通過變換圖片的編碼壓縮演算法減少大小,但是不會改變 Bitmap 資料,對于 actool 來說,它接收的輸入沒有改變,所以無損壓縮無法優化 Assets.car 的大小,

那是否有其他的壓縮方式能優化 Assets.car 的大小呢?我們猜測對圖片做合適的有損壓縮是一個思路,

于是我們嘗試了 RGB with palette 編碼方式[2],RGB with palette 編碼的得到的位元組流首先維護了一個顏色陣列,顏色陣列每個成員用 RGBA 四個分量維護一個顏色,影像中的每個像素點則存盤顏色陣列的下標代表該點的顏色,顏色陣列維護的顏色種類和數量由圖片決定,同時可以人為的限制顏色陣列維護顏色的種類的上限,默認為最大值 256 種,這種編碼方式正如它的名字:palette(調色板),

App 中大部分圖片雖然使用了很多種類的顏色,但這些顏色中大多數都非常接近,從視覺上很難分辨,比如大量扁平風格的 icon,這種型別的圖片非常適合用 palette 編碼且減少顏色陣列大小的方式來進行有損壓縮,既能減少顏色數量實作有損壓縮,也能保證保留的顏色貼近原始圖片,使得經過有損壓縮后的也看起來質量無損,我們在今日頭條上落地,獲得了 3.15MB 包大小收益,

在具體執行中,我們使用了 ImageOptim 工具改變圖片的編碼方式為 RGB with palette :

imageoptim -Q --no-imageoptim --imagealpha --number-of-colors 16 --quality 40-80 ./1.png

其中 --number-of-colors 控制顏色陣列維護顏色的數量;--quality 控制圖片的質量變為原來的百分比,我們的經驗表明,當 --number-of-colors 從 16 開始向上調整,--quality 維持 40-80,能夠在顯著減少包大小的同時維持肉眼看不到的質量變化,經過 UI 同學的像素眼審查,確認優化前后的圖片看起來無差別,

2.3、Assets.car 合并

今日頭條使用 CocoaPods 進行組件集成,各個組件攜帶的 Asset Catalog 檔案以 Podspec 中 resource_bundles 的方式引入,最侄訓以 Bundle 下的 Assets.car 檔案的形式體現在安裝包內,

以 7.9.4 版本為例,安裝包內有 106 個 Bundle 包含 Assets.car 檔案:

Assets.car 檔案本質上是 BOM 檔案,同時,Xcode 在使用 actool 構建 Assets.car 檔案時,也會自帶一些優化操作,比如:將若干張小圖片自動合并為一張 Packed Image,因此,將若干個 Assets.car 合并,可以減少重復的 BOM Block,也可以最大化享受到 actool 自帶的優化效果,

在構建的程序中,今日頭條通過在 Build Phases 中加入腳本,將多個庫中 Asset Catalog 中的圖片合并到一個 Asset Catalog 中,再經 actool 構建成 Assets.car 產物,這一優化產生了 2.1MB 的包大小收益,同時,從理論上分析,這一優化也可以減少運行時 Assets.car 的決議操作,對圖片讀取的回應耗時有正向收益,

2.4、文本檔案壓縮

除了占比最大的圖片資源,今日頭條安裝包內還有不少文本檔案資源,如 JSON 檔案、HTML 檔案等,這些文本檔案的壓縮也能帶來包大小優化效果,

今日頭條落地的文本檔案壓縮方案由三部分組成:

1、壓縮階段:在 Build Phase 中添加腳本,構建期間對白名單內的文本檔案做 zip 壓縮;

2、解壓階段:在 App 啟動階段,在異步執行緒中進行解壓操作,將解壓產物存放到沙盒中;

3、讀取階段:在 App 運行時,hook 讀取這些檔案的方法,將讀取路徑從 Bundle 改為沙盒中的對應路徑;

這一方案能在業務入侵較少的前提下完成壓縮優化,我們首先將這一方案應用在了 Lottie 影片的 JSON 檔案上,產生了 400KB 的包大小收益,后續這一方案也可以進一步拓展,應用在更多型別的檔案上,

三、Mach-O 檔案優化

在資源優化的同時,我們也關注到,Mach-O 檔案始終占據了今日頭條安裝包 80% 左右的體積,Mach-O 檔案的優化必不可少,下面我們以時間順序,介紹我們落地的 Mach-O 檔案優化項,

3.1、使用 -Oz 編譯引數

Oz 是 Xcode 11 新增的編譯優化選項,WWDC 2019 《What's New in Clang and LLVM》[3] 中對 Oz 有過介紹,Oz 的核心原理是對重復的連續機器指令外聯成函式進行復用,和“行內函式”的原理正好相反,因此,開啟 Oz,能減小二進制的大小,但同時理論上會帶來執行效率的額外消耗,對性能(CPU)敏感的代碼使用需要評估,

蘋果給的參考資料是 4.5% 的包體積收益,

我們在評估了執行效率、堆疊決議、穩定性和編譯速度后,對大部分源代碼開啟了 Oz 編譯,包體積減小 4MB 以上,

3.2、使用鏈接時優化 LTO

Link-Time Optimization 鏈接時優化,是 Xcode 自帶的一個編譯/鏈接引數,根據 WWDC 2016 《What's New in LLVM》[4]的介紹,LTO 對包大小和運行效率都有正向影響,今日頭條在編譯和鏈接中均開啟 Incremental LTO 后,包體積減小 6.5MB,

3.3、修正 Exported Symbols 配置

Xcode Build Settings 中的 EXPORTED_SYMBOLS_FILE 配置,控制著 Mach-O 中 __LINKEDIT 段中 Export Info 的資訊,動態聯結器 dyld 在做符號系結時,會讀取被系結的動態庫或可執行檔案的 Export Info 資訊,得到一個符號對應的實際呼叫地址,如果正在被系結的符號,在目標動態庫的 Export Info 中缺失,dyld 則會拋出例外,表現為 App 崩潰,

雖然從原理上看,Export Info 中的資訊不可或缺,但是,對于一個 Mach-O 檔案來說,并非所有的符號都是需要暴露給其他動態庫或可執行檔案的,理想情況下,私有的符號應該在編碼時就應該以 __attribute__((visibility(hidden))) 修飾,但在歷史代碼難以逐個添加修飾符的情況下,Exported Symbols 配置給了工程一個維護公有符號白名單的機會,如果填寫了有效的 EXPORTED_SYMBOLS_FILE 配置,動態庫或者可執行檔案會在靜態鏈接時去掉白名單以外的符號,起到縮減包大小、增加逆向難度的作用,

今日頭條在使用 Exported Symbols 配置后,包大小減少了 2.1MB,

3.4、屬性動態化

屬性是 OC 中最常見的概念之一,然而,一個屬性并沒有我們想象的這么小,通過分析 Mach-O 檔案,我們發現,一個屬性可以分為三個部分:

(1)成員變數部分:成員變數本質是一個大小 32B 的結構體,結構體中三個指標(Offset、Name、Type)指向的內容的大小分別為 8B、10B、10B,其中 Name、Type 指標指向的內容的大小和成員變數的型別、名字長度相關,總大小大約 60B,

@interface presentViewController ()
@property (nonatomic,strong) UIImageView *imageView;
@property (nonatomic,strong) UIButton *button;
@property (nonatomic,strong) NSString *name;
@end

(2)自動生成的 set/get 方法部分:set/get 方法本質是一個大小 24B 的結構體,結構體包含三個指標 Name、Type、Implementation,指向的內容大小大概為 10B、10B、20B,一個方法大小大概是64B,set、get 兩個方法就是 128B,

(3)property 部分:property 的本質仍然是個結構體,大小是 16B,結構體中兩個指標指向內容的大小分別大概是 10B、10B,和屬性的名字和型別相關,總大小大概 36B,

即一個屬性占用的包大小大約為 224B,

如果我們用 @dynamic 修飾一個屬性,不生成成員變數、get/set 方法,則一個屬性可以由 224B 減少到 36B,即僅包含 property 部分的大小,

同時,代碼中存在大量通過腳本自動生成的 JSONModel 子類,這些子類往往擁有大量屬性,這里也就存在著包大小優化空間,

于是我們通過修改生成 JSONModel 子類的腳本,實作了:

1、屬性全部使用 @dynamic 修飾,基礎變數額外生成 IVAR

2、所有 JSONModel 的子類繼承自新的父類,新的父類實作 resolveInstanceMethod,在該方法中用 class_addMethod 統一為屬性添加 get/set 方法,物件型別的屬性使用關聯物件的方式存取,基礎型別的屬性使用額外生成的 IVAR 存取,

這一優化獲得了 800KB 的包大小收益,并且評估對讀寫的性能影響損耗可以接受,

3.5、__TEXT 段遷移

安裝包經過壓縮后的 Download Size 若超過 200 MB,在蜂窩網路下載 App 就會受到限制,這對新增會有較大影響,在 2020 年下半年,我們探索實踐了 __TEXT 段遷移技術:在鏈接階段使用 -rename_p 選項將 __TEXT,__text 遷移到 __BD_TEXT,__text,減少蘋果對可執行檔案的加密范圍,提升可執行檔案的壓縮效率,從而減少 Download Size,

使用該方案我們最終減少了 60 MB 的 Download Size 以及 2 MB 的 Install Size,詳細的原理可以參考:《今日頭條優化實踐:iOS 包大小二進制優化,一行代碼減少 60 MB 下載大小》[5],

3.6、二進制段壓縮

Mach-O 檔案占據了 Install Size 中很大一部分比例,但并不是檔案中的每個段/節在程式啟動的第一時間都要被用到,可以在構建程序中將 Mach-O 檔案中的這部分段/節壓縮,然后只要在這些段被使用到之前將其解壓到記憶體中,就能達到了減少包大小的效果,同時也能保證程式正常運行,由于蘋果的一些限制,我們目前只壓縮了 __TEXT,__gcc_except_tab__TEXT,__objc_methtype兩個節,然后在 _dyld_register_func_for_add_image 的回呼中對它進行解壓,該方案累計優化了 3.5 MB Install Size,

四、總結

在以上優化項落地的同時,我們還與業務協作,通過挖掘無用代碼、無用資源等手段,進一步優化著安裝包大小,使得今日頭條在高速的業務迭代下,包大小仍能保持穩定,

五、加入我們

在實踐包大小優化的程序中,我們發現,做優化,既需要靜下心來做技術攻堅,也需要與各方協作配合,我們作為今日頭條平臺架構 iOS 團隊,在性能優化、基礎組件、業務架構、研發體系、安全合規、線下質量基礎設施、線上問題定位歸因平臺等方向持續深耕,負責保障和提升今日頭條的產品質量和開發效率,聚焦于今日頭條的同時向外延伸,

如果你對技術充滿熱情,喜歡追求極致,渴望用自己的代碼改變數億用戶的體驗,歡迎加入我們,我們期待你與我們共同成長,目前我們在北京、深圳均有招聘需求,簡歷投遞郵箱:tech@bytedance.com;郵件標題:姓名 - 作業年限 - 今日頭條 - 平臺架構 - iOS/Android

參考資料

[1] 干貨|今日頭條iOS端安裝包大小優化—思路與實踐

[2] Palette Images

http://www.manifold.net/doc/mfd9/palette_images.htm

[3] WWDC 2019 What's New in Clang and LLVM

https://developer.apple.com/videos/play/wwdc2019/409/

[4] WWDC 2016 What's New in LLVM

https://developer.apple.com/videos/play/wwdc2016/405/

[5] 今日頭條優化實踐:iOS 包大小二進制優化,一行代碼減少 60 MB 下載大小


歡迎關注「 位元組跳動技術團隊 」

簡歷投遞聯系郵箱「 tech@bytedance.com 」

點擊閱讀原文,快來加入我們吧!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/256000.html

標籤:AI

上一篇:探索JavaScript中Null和Undefined的深淵

下一篇:Elasticsearch 聚合性能優化六大猛招

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more