Golang kindNoPointers標誌詳解

2021-09-27 01:31:02 字數 1202 閱讀 6689

在看golang原始碼時,有時會判斷變數型別是否為kindnopointers,然後根據判斷做出一些處理,那kindnopointers究竟表示什麼意思呢?

定義@(src\runtime\typekind.go:37)

kindnopointers  = 1 << 7
注,在原始碼中多個檔案都有定義kindnopointers,但沒關係,值都是1 << 7

從字面上看,這個標誌用來表示型別是否含有指標,事實上也確實如此,看原始碼:

@(src/cmd/compile/internal/gc/reflect.go:887)

func dcommontype(lsym *obj.lsym, t *types.type) int 

...}

編譯器會對判斷每個型別是否含有指標,沒有就置kindnopointers。具體判斷是否含有指標**如下:

@(src/cmd/compile/internal/types/type.go:887)

func haspointers(t *type) bool 

func haspointers1(t *type, ignorenotinheap bool) bool

return haspointers1(t.elem(), ignorenotinheap)

case tstruct:

for _, t1 := range t.fields().slice()

} return false

case tptr, tslice:

return !(ignorenotinheap && t.elem().notinheap())

case ttuple:

ttup := t.extra.(*tuple)

return haspointers1(ttup.first, ignorenotinheap) || haspointers1(ttup.second, ignorenotinheap)

} return true

}

**不多,可簡單總結下:

在go裡面好像沒有看到過tuple型別,估計是內部用的,沒有開放出來

檔案描述符標誌 檔案屬性標誌 開啟檔案標誌

檔案描述符標誌用於乙個程序中的 乙個檔案描述符,檔案屬性標誌應用於指向該給定檔案結構的任何程序中的所有檔案描述符。呼叫 fcntl 函式可以獲得和修改檔案描述符標誌和檔案屬性標誌。檔案描述符 檔案屬性標誌檔案開啟標誌即檔案屬性標誌。在檔案i o操作時會使用到檔案屬性標誌,例如open函式的引數中就要...

標誌暫存器df 關於標誌暫存器的各個標誌

運算結果標誌位 1 進製標誌cf carry flag 進製標誌cf主要用來反映運算是否產生進製或借位。如果運算結果的最高位產生了乙個進製或借位,那麼,其值為1,否則其值為0。使用該標誌位的情況有 多字 位元組 數的加減運算,無符號數的大小比較運算,移位操作,字 位元組 之間移位,專門改變cf值的指...

檔案描述符標誌 檔案狀態標誌

二 檔案狀態標誌 三 開啟檔案的核心資料結構圖 四 介面函式 一 檔案描述符標誌 每個程序為所有開啟的檔案維護對應的fd flag。當前只定義了乙個檔案描述符標誌 fd cloexec 若設定某個檔案的fd flag 即為1 則程序fork出子程序時,執行exec前要關閉這個檔案描述符。fd clo...