亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無論 Rosetta 如何,獲取 M1 Mac 的真實架構

無論 Rosetta 如何,獲取 M1 Mac 的真實架構

牧羊人nacy 2023-12-14 16:58:07
我需要檢索 Mac 的真實架構,無論該進程是否通過 Rosetta 運行?,F在在 Node.js 中process.arch返回,x64在 shell 中uname -m返回x86_64。
查看完整描述

2 回答

?
富國滬深

TA貢獻1790條經驗 獲得超9個贊

如果翻譯一下的話:

$?sysctl?sysctl.proc_translated
sysctl.proc_translated:?1

如果不:

$?sysctl?sysctl.proc_translated
sysctl.proc_translated:?0

在非 ARM Mac 上:

$?sysctl?sysctl.proc_translated
sysctl:?unknown?oid?'sysctl.proc_translated'


查看完整回答
反對 回復 2023-12-14
?
慕后森

TA貢獻1802條經驗 獲得超5個贊

命令行sysctl -n sysctl.proc_translated或本機等效sysctlbyname()調用將指示您是否在 Rosetta 下運行。


另外兩個sysctl值是相關的。在沒有 Rosetta 的 M1 硬件上,返回這些值:


hw.cputype: 16777228

hw.cpufamily: 458787763

hw.cputype是0x0100000C(CPU_TYPE_ARM64)并且hw.cpufamily是0x1b588bb3(CPUFAMILY_ARM_FIRESTRM_ICESTORM)。


然而,當在 Rosetta 下執行時,收集 CPUID 的低級機器代碼優先,并通過命令行sysctlbyname()和命令行返回以下兩個值:


hw.cputype: 7

hw.cpufamily: 1463508716

它們對應于0x7(CPU_TYPE_X86) 和0x573b5eec(INTEL_WESTMERE)。


Rosetta 似乎報告了 Rosetta 下有一個與 x86 兼容的 Westmere 芯片,但這個選擇在我見過的所有地方似乎都是一致的。這種“虛擬架構”對于某些程序可能是有用的信息。


另一種可能性出現在 IO 注冊表中。雖然默認IOService平面實時收集數據,但該IODeviceTree平面在啟動時存儲,并在樹中包含這些條目(命令行ioreg -p IODeviceTree或ioreg -c IOPlatformDevice):


cpu0@0  <class IOPlatformDevice, id 0x10000010f, registered, matched, active, busy 0 (180 ms), retain 8>

    | | | {

...

    | | |   "compatible" = <"apple,icestorm","ARM,v8">

(對于 CPU 0-3)和


cpu4@100  <class IOPlatformDevice, id 0x100000113, registered, matched, active, busy 0 (186 ms), retain 8>

    | | | {

...

    | | |   "compatible" = <"apple,firestorm","ARM,v8">

(適用于 CPU 4-7)


這清楚地表明了ARMv8 Firestorm + Icestorm M1芯片。


同樣的方法也適用于 M1 Pro 和 M1 Max。


查看完整回答
反對 回復 2023-12-14
  • 2 回答
  • 0 關注
  • 211 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號