自然對齊(記憶體位址)

2021-05-10 13:20:19 字數 660 閱讀 1180

c++中  基本資料型別的變數不能簡單的儲存於記憶體中的任意位址,他們的起始位址必須能被他們的大小整除。

typedef unsigned char byte;

enum color ;

struct  eigth

{double m_price;

color m_color;

bool m_isshift;

bool m_bool;

byte m_byte;

//sizeof(eigth) =32

常常我們會去完全滿足它的自然對齊要求,同時會去滿足其每個成員的自然對齊要求,這是個非常浪費記憶體的行為。

那麼該怎麼樣去節省記憶體?

顯然是設法減少物件中的空洞,寧願讓末尾留下空洞,也不要讓中間留下空洞,盡量讓所有成員連續存放,

並將少末尾的填充位元組,

方法:安裝從大到小的順序從前到後依次宣告每乙個資料成員。並且盡量使用較小的成員對齊方式

修改後:

struct  eigth

{bool m_bool;

color m_color;

bool m_isshift;

double m_price;

byte m_byte;

//sizeof(eigth) =16

呵呵, 挺誇張的

記憶體位址對齊

記憶體位址對齊,是一種在計算機記憶體中排列資料 訪問資料的一種方式,包含了兩種相互獨立又相互關聯的部分 基本資料對齊和結構體資料對齊。當今的計算機在計算機記憶體中讀寫資料時都是按字 word 大小塊來進行操作的 在32位系統中,資料匯流排寬度為32,每次能讀取4位元組,位址匯流排寬度為32,因此最大...

記憶體位址的對齊

3 有 pragma pack int 進行設定,如果結構體某成員的sizeof大於你設定的,則按你的設定來對齊 注意 每次用 pragma pack int 進行設定後,要用 pragma pack 對其結束,免得造成錯誤 view plain copy to clipboard print in...

記憶體位址對齊方式

對齊的作用和原因 各個硬體平台對儲存空間的處理上有很大的不同。一些平台對某些特定型別的資料只能從某些特定位址開始訪問。其他平台可能沒有這種情況,但是最常見的是如果不按照適合其平台的要求對資料存放進行對齊,會在訪問效率上帶來損失。比如有些平台每次讀都是從偶位址開始,如果乙個int型 假設為 32位 如...