3 回答

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

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

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