title: pragma pack(n)與內存對其問題
date: 2016-06-08 15:32:11
categories: C++
tags:
- C
- C++
- 內存對齊
- pragma pack
作用:屏蔽掉編譯器爲變量設定的默認的對其方式,設定自己的對其方式
而#pragma pack(n)
表示設定變量以n字節對其。
- 如果n大於等於該變量所佔的字節數,那麼偏移量必須滿足默認的對其方式
- 如果n小於該變量的類型所佔用的字節數,那麼偏移量爲n 的整數倍,不用滿足默認的對其方式。
結構體的總大小也有個約束條件:
- 如果n大於所有的成員變量類型所佔用的字節數,那麼結構的總大小必須爲佔用空間最大的變量佔用的空間數的倍數
- 如果n小於所有成員變量類型所佔用的字節數,那麼必須爲n的倍數。
舉例說明:
#pragma pack(push) //保持對齊狀態
#pragma pack(4) //設定爲4字節對齊
strust test
{
char m1;
double m4;
int m3;
}
#pragma pack(pop) //恢復對齊狀態