真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Go語言是否有必要內(nèi)存對齊

這篇文章主要講解了“Go語言是否有必要內(nèi)存對齊”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Go語言是否有必要內(nèi)存對齊”吧!

專注于為中小企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)沛縣免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

有些同學(xué)可能不知道,struct 中的字段順序不同,內(nèi)存占用也有可能會相差很大。比如:

type T1 struct {  a int8  b int64  c int16 } type T2 struct {  a int8  c int16  b int64 }

在 64 bit 平臺上,T1 占用 24 bytes,T2 占用 16 bytes 大?。欢?32 bit 平臺上,T1 占用 16 bytes,T2 占用 12 bytes 大小。可見不同的字段順序,最終決定 struct 的內(nèi)存大小,所以有時候合理的字段順序可以減少內(nèi)存的開銷。

這是為什么呢?因為有內(nèi)存對齊的存在,編譯器使用了內(nèi)存對齊,那么最后的大小結(jié)果就會不一樣。至于為什么要做對齊,主要考慮下面兩個原因:

平臺(移植性)

不是所有的硬件平臺都能夠訪問任意地址上的任意數(shù)據(jù)。例如:特定的硬件平臺只允許在特定地址獲取特定類型的數(shù)據(jù),否則會導(dǎo)致異常情況

性能

若訪問未對齊的內(nèi)存,將會導(dǎo)致 CPU 進(jìn)行兩次內(nèi)存訪問,并且要花費(fèi)額外的時鐘周期來處理對齊及運(yùn)算。而本身就對齊的內(nèi)存僅需要一次訪問就可以完成讀取動作,這顯然高效很多,是標(biāo)準(zhǔn)的空間換時間做法

有的小伙伴可能會認(rèn)為內(nèi)存讀取,就是一個簡單的字節(jié)數(shù)組擺放。但實際上 CPU 并不會以一個一個字節(jié)去讀取和寫入內(nèi)存,相反 CPU 讀取內(nèi)存是一塊一塊讀取的,塊的大小可以為 2、4、6、8、16 字節(jié)等大小,塊大小我們稱其為內(nèi)存訪問粒度。假設(shè)訪問粒度為 4,那么 CPU 就會以每 4 個字節(jié)大小的訪問粒度去讀取和寫入內(nèi)存。

在不同平臺上的編譯器都有自己默認(rèn)的 “對齊系數(shù)”。一般來講,我們常用的 x86 平臺的系數(shù)為 4;x8664 平臺系數(shù)為 8。需要注意的是,除了這個默認(rèn)的對齊系數(shù)外,還有不同數(shù)據(jù)類型的對齊系數(shù)。數(shù)據(jù)類型的對齊系數(shù)在不同平臺上可能會不一致。例如,在 x8664 平臺上,int64 的對齊系數(shù)為 8,而在 x86 平臺上其對齊系數(shù)就是 4。

還是拿上面的 T1、T2 來說,在 x86_64 平臺上,T1 的內(nèi)存布局為:

T2 的內(nèi)存布局為(int16 的對齊系數(shù)為 2):

仔細(xì)看,T1 存在許多 padding,顯然它占據(jù)了不少空間。那么也就不難理解,為什么調(diào)整結(jié)構(gòu)體內(nèi)成員變量的字段順序就能達(dá)到縮小結(jié)構(gòu)體占用大小的疑問了,是因為巧妙地減少了 padding 的存在。讓它們更 “緊湊” 了。

其實內(nèi)存對齊除了可以降低內(nèi)存占用之外,還有一種情況是必須要手動對齊的:在 x86 平臺上原子操作 64bit 指針。之所以要強(qiáng)制對齊,是因為在 32bit 平臺下進(jìn)行 64bit 原子操作要求必須 8 字節(jié)對齊,否則程序會 panic

感謝各位的閱讀,以上就是“Go語言是否有必要內(nèi)存對齊”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Go語言是否有必要內(nèi)存對齊這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!


本文名稱:Go語言是否有必要內(nèi)存對齊
本文鏈接:http://weahome.cn/article/gspppo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部