CPU 功能
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
如要檢查程式碼中的 CPU 功能,有多種方法可以選擇,但每種方法都各有優缺點。
ABI:使用前置處理器的預先定義巨集
如要確定 ABI,最方便的做法通常是在建構時使用 #ifdef
與以下項目:
- 針對 32 位元 ARM,使用
__arm__
- 針對 64 位元 ARM,使用
__aarch64__
- 針對 32 位元 X86,使用
__i386__
- 針對 64 位元 X86,使用
__x86_64__
請注意,32 位元 X86 稱為 __i386__
,而非 __x86__
,這可能與您所預想的不同!
CPU 核心數:使用 libc 的 sysconf(3)
sysconf(3) 可讓您查詢 _SC_NPROCESSORS_CONF
(系統中的 CPU 核心數) 和 _SC_NPROCESSORS_ONLN
(目前線上使用的 CPU 核心數)。
功能:使用 libc 的 getauxval(3)
在 API 級別 18 及更新級別中,Android 的 C 程式庫支援 getauxval(3)。AT_HWCAP
和 AT_HWCAP2
引數會傳回列出 CPU 專屬功能的位元遮罩。請參閱 NDK 中各種不同的 hwcap.h
標頭以比較各個常數,例如用於 arm64 SHA512 指令的 HWCAP_SHA512
,或用於 arm Thumb 整數除法指令的 HWCAP_IDIVT
。
Google cpu_features 程式庫
AT_HWCAP
的其中一個問題是裝置有時會出錯。例如,部分舊裝置聲稱具有整數除法指令,但實際上並沒有。
Google 的 cpu_features 程式庫憑藉對特定 SoC 的瞭解 (透過剖析 /proc/cpuinfo
掌握對應的特定 SoC),解決了這類問題。
維護這個程式庫是為了供 Google 的第一方應用程式團隊使用,而且此程式庫針對團隊實際遇到的所有問題裝置提供解決方法。
NDK cpufeatures 程式庫 (已淘汰)
NDK 仍有提供名為 cpufeatures
的已淘汰程式庫,藉此確保與已採用這個程式庫的應用程式的來源相容性。與較新且更完整的 cpu_features 程式庫不同,這個舊程式庫並未針對許多特定的 SoC 提供解決方法。
這個頁面中的內容和程式碼範例均受《內容授權》中的授權所規範。Java 與 OpenJDK 是 Oracle 和/或其關係企業的商標或註冊商標。
上次更新時間:2024-01-10 (世界標準時間)。
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"缺少我需要的資訊"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"過於複雜/步驟過多"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"過時"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"翻譯問題"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"示例/程式碼問題"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"其他"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"容易理解"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"確實解決了我的問題"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"其他"
}]
{"lastModified": "\u4e0a\u6b21\u66f4\u65b0\u6642\u9593\uff1a2024-01-10 (\u4e16\u754c\u6a19\u6e96\u6642\u9593)\u3002"}
[[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["缺少我需要的資訊","missingTheInformationINeed","thumb-down"],["過於複雜/步驟過多","tooComplicatedTooManySteps","thumb-down"],["過時","outOfDate","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["示例/程式碼問題","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新時間:2024-01-10 (世界標準時間)。"]]