「譯」 Go語言結構體中屬性的順序將影響結構體的大小

在Go語言中,結構體的大小取決於內部屬性的類型以及它們的排列順序。

「譯」 Go語言結構體中屬性的順序將影響結構體的大小

上面這個結構體的大小和下面這個結構體的大小是不同的,儘管它們只是屬性的定義順序不同。

「譯」 Go語言結構體中屬性的順序將影響結構體的大小


為什麼會這樣?可以把內存想象成是由一個一個固定大小的小盒子組成的。如果結構體的某個屬性的大小大於當前盒子剩餘的大小,那個這個屬性將填入下一個盒子中。這將造成上一個盒子的尾部空間沒有被填入數據,但是卻佔用了內存。這種結構體初始化每個變量實例時都會有這種情況。

這裡有一個非常棒的網站(
http://golang-sizeof.tips/),你可以在這個網站上輸入一個結構體的定義,然後查看內存佈局。我們拿上面第一個結構體來看:

「譯」 Go語言結構體中屬性的順序將影響結構體的大小


下面是第二個結構體的展示:

「譯」 Go語言結構體中屬性的順序將影響結構體的大小


分享到:


相關文章: