現代計算機中內存空間都是按照字節(byte)進行劃分的,所以從理論上講對于任何類型的變量訪問都可以從任意地址開始,但是在實際情況中,在訪問特定類型變量的時候經常在特定的內存地址訪問,所以這就需要把各種類型數據按照一定的規則在空間上排列,而不是按照順序一個接一個的排放,這種就稱為內存對齊,內存對齊是指首地址對齊,而不是說每個變量大小對齊。
我們知道內存的最小單元是一個字節,但是當cpu從內存中讀取數據的時候,cpu并不是以字節為單位訪問數據,而是將內存當成多個塊,每次從內存中讀取一個塊,這個塊的大小可能是2、4、8、16字節等。
如果沒有對齊,為了訪問一個變量可能產生二次訪問。
所以內存對齊是操作系統為了提高訪問內存的效率。操作系統在訪問內存的時候,每次讀取一定長度(這個長度是操作系統默認的對齊數,或者默認對齊數的整數倍)。使用空間換時間,提高了效率。
如何內存對齊1、第一個數據成員要放在offset為0的位置。
2、從第二個數據成員開始 要放在 min(當前成員大小,對齊模數)的整數倍的地方開始位置。
比如int在32位機器為4字節,#pargama pack(2),即對齊模數為2。那么從2的倍數地方開始存儲
3、二次偏移:所有屬性計算完后,結構體的總大小為:min(結構體內部大成員大小, 對齊模數)的整數倍,不足補齊。
4、結構體做為成員的對齊規則。假設A結構體為B結構體的成員,那么結構體A的起點位置為 min(A結構體中大成員, 對齊模數)。
注意:
1、對齊模數可以通過#pargama pack(show)查看(默認對齊模數=8字節),也可以通過#pargama pack(n),修改為n
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
文章標題:內存對齊那點事-創新互聯
地址分享:http://vcdvsql.cn/article28/cedccp.html
成都網站建設公司_創新互聯,為您提供網站策劃、網站改版、網站設計公司、品牌網站制作、標簽優化、手機網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯