假設我有以下代碼
//var mystruct *MyStruct // method 1
//var mystruct MyStruct // method 2
type MyStruct struct {
// struct fields
}
我了解方法 1 和方法 2 在宣告 mystruct 變數方面的基本區別。它們都需要分配相同數量的記憶體,第一種方法需要一個額外的指標。第一種方法在堆上分配記憶體,第二種方法在堆疊上分配。如果堆疊記憶體可能承受壓力,我想第一種方法是首選。
這兩種將結構變數宣告為包中的全域變數的方式之間是否有任何其他實際差異?
uj5u.com熱心網友回復:
宣告指標不會在堆上分配記憶體。它只是宣告一個指標。
如果您宣告一個結構的實體(不是指標),那么該結構的記憶體將分配在堆上,并留在那里。用于宣告它的符號名稱 ( myStruct) 始終參考該結構實體。
如果你*myStruct像上面那樣宣告一個指標,它會被初始化為 nil。訪問它會恐慌。您必須分配myStruct給已分配實體的地址MyStruct。一個重要的區別是,如果您宣告一個指標,它指向的位置可能會在程式期間發生變化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/505077.html
標籤:去
上一篇:io.Pipe使用困難
下一篇:訪問自定義型別的原始功能
