為什麼C C 程式語言經常會提到對齊?對齊到底是什麼,為什麼要對齊,對齊有什麼好處?

時間 2021-05-07 06:55:42

1樓:哲學家

除了其他答案提到的32位或64位對齊以外,還有一種叫cache line 對齊。快取的讀取是一塊塊的,比如每64位元組是一塊。對一些訪問頻繁的資料結構,快取對齊可以保證整個資料結構都在一塊裡,cache miss 的情況下只需要讀一塊。

話說回來,這些對齊都是很底層的東西了,不是對效能有極高要求的情況其實不用考慮

2樓:大蘋果

32位CPU可以一次讀入4個位元組,64位CPU可以一次讀入8個位元組,但是有乙個前提,就是這4個位元組或者8個位元組,必須在四位元組邊界或八字節邊界。也就是說位址必須是4N或者8N。如果不是這樣,就需要讀兩次,效率就降低了。

有的CPU直接就異常了。

3樓:趙鑫磊

記憶體對齊,cpu要求程式根據其資料字長對齊記憶體訪問。說人話就是,32位的cpu一次至少讀取32位的資料,64位的cpu一次至少讀取64位資料,且起始位址是資料字長的整數倍,資料跨字長邊界則不能參與運算。在x86系列cpu中,會自動進行糾正,代價就是效率降低浪費cpu時鐘;arm等精簡指令cpu直接異常。

不知道我是否講清楚了。

為什麼C C 等少數程式語言要區分左右值?

棧廬 簡單來說 左值 lvalues 表示返回可分配值的物件的表示式,右值 rvalues 表示返回可分配給物件的值的表示式。乙個右值 rvalues 是乙個在記憶體中沒有位址的表示式。臨時物件是在同一表示式中建立和銷毀的物件,因此通常是未命名的物件,或者是在隱式轉換完成後由編譯器建立的物件。它們的...

為什麼經常會感到心慌害怕?

一葉落而知秋 因為不自信,能力不足,知交缺少 不自信嚴重影響乙個人看待生活方方面面的態度和眼界 能力不足,這也是乙個人不自信的根源之一,會沒有安全感,擔心被社會淘汰 而身邊如果連乙個那種可以交心換命的朋友都木有,還怎麼混,畢竟人是群居動物。 冷水澆頭 我的原因取決於沒有安全感和自卑吧。成長的過程中,...

為什麼現代程式語言通常對 null 深惡痛絕,卻鮮有特殊對待 0 的呢?

菜瓜程式猿 Null代表的是空指標,如何設計到記憶體相關的呼叫操作,很有可能程式會執行到Null變數時出錯。而0值作為常量,可以避免記憶體中空指標的存在,避免產生一些難以發現的bug 這是因為這些語言的型別設計遺留問題。正常觀點看來兩個物件的比較應該先比較型別,比如 0is False is a S...