3 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
您正在混淆 uintptr 和 *uint。uintptr 在處理指針時(shí)使用,它是一種足夠大以容納指針的數(shù)據(jù)類型。它主要用于不安全的內(nèi)存訪問(wèn),查看unsafe包。*uint 是指向無(wú)符號(hào)整數(shù)的指針。

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個(gè)贊
簡(jiǎn)短的回答是“從不使用uintptr
”。??
長(zhǎng)的答案是,uintptr
是否可以繞過(guò)類型系統(tǒng)并允許 Go 實(shí)現(xiàn)者在 Go 中編寫(xiě) Go 運(yùn)行時(shí)庫(kù)(包括垃圾收集系統(tǒng)),并調(diào)用 C 可調(diào)用代碼,包括使用不被處理的 C 指針的系統(tǒng)調(diào)用。去吧。
如果您作為實(shí)施者(例如,提供對(duì)新操作系統(tǒng)上的系統(tǒng)調(diào)用的訪問(wèn)),您將需要uintptr
.?您還需要了解使用它所需的所有特殊魔法,例如,如果操作系統(tǒng)要對(duì)操作系統(tǒng)級(jí)線程執(zhí)行堆棧式操作,則將 goroutine 鎖定到操作系統(tǒng)級(jí)線程。(如果您將其與 Go 指針一起使用,您可能還需要告訴編譯器不要移動(dòng)您的 goroutine 堆棧,這是通過(guò)特殊的編譯時(shí)指令完成的。)
運(yùn)行時(shí)系統(tǒng)將 anunsafe.Pointer
視為對(duì)對(duì)象的引用,這使對(duì)象在 GC 中保持活動(dòng)狀態(tài)。它不認(rèn)為 auintptr
是這樣的參考。(也就是說(shuō),雖然unsafe.Pointer
有指針類型,但uintptr
有整數(shù)類型。)

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊
uintptr 只是內(nèi)存地址的整數(shù)表示形式,無(wú)論它指向的實(shí)際類型是什么。有點(diǎn)像void *
C 語(yǔ)言,或者只是將指針轉(zhuǎn)換為整數(shù)。它的目的是用于不安全的黑魔法,并且不會(huì)在日常的 go 代碼中使用。
- 3 回答
- 0 關(guān)注
- 272 瀏覽
添加回答
舉報(bào)