即使只占6个字节,它的下一个类型short d,同样要从%4==0的地址才能开始存储,
为什么不直接为8呢?
å ³äº#pragma pack()åsizeofçç¨æ³åææï¼æå æ¡è§å
1. ç»æä½åéçé¦å°åè½å¤è¢«å ¶æ宽åºæ¬ç±»åæåç大å°ææ´é¤ï¼
2. ç»æä½æ¯ä¸ªæåç¸å¯¹äºç»æä½é¦å°åçå移éï¼offsetï¼é½æ¯æå大å°çæ´æ°åï¼å¦æéè¦ç¼è¯å¨ä¼å¨æåä¹é´å ä¸å¡«å åèï¼internal addingï¼ï¼
3. ç»æä½çæ»å¤§å°ä¸ºç»æä½æ宽åºæ¬ç±»åæå大å°çæ´æ°åï¼å¦æéè¦ï¼ç¼è¯å¨ä¼å¨ææ«ä¸ä¸ªæåä¹åå ä¸å¡«å åèï¼trailing paddingï¼ã
å¦æå®ä¹äº#pragma pack(n)ï¼å第äºæ¡è§åéé¢ï¼offsetæ¯è¯¥æå大å°ånä¹é´è¾å°çæ°çæ´æ°åã
æä»¥ä½ å®ä¹#pragma pack(4)çè¯ï¼å¯¹äºshortç±»å没æåºå«ï¼ä»ç¶å¯ä»¥ç´§å¯æåï¼sizeof(a)=3*2=6ã追é®
谢谢 ä¸ç¥éæ¯ä¸æ¯ç¬¬2ã3æ¡è§å没ç解好 ï¼ä¸ç¥éå®è¿æ ·è®¾è®¡çåå ï¼
æç
§è¿ä¸ªè§å çç¡® æ¯ sizeof(a)=3*2=6ï¼ä½æ¯ç´§æ¥å®åé¢çç±»åçåå¨å°åè¿æ¯è¦ä»%4==0çå°æ¹å¼å§ï¼32ä½æºå¨ï¼ï¼ä¸ºä½ä¸ç´æ¥è®©sizeof(a)=3*2+2ï¼å¡«å
2个åèï¼=8ï¼å å
«ä¸ªåè ï¼è¿æ ·ä¹å¯åå°ä¸ä¸ä¸ªç±»ååå¨é¦å°åç计ç®æä½å
æ¯å¦è¯´ï¼
32为平å°
#pragma pack(4) //è¿ä¸ªé»è®¤å¼ä¹è¯¥æ¯4
对äºç»æä½æ»é¿åº¦4ç,æ8对é½
åé¢çæ°æ®ç±»åè·açsize没æå
³ç³»ï¼å°±ç®æ¯doubleéè¦%8é£ä¹ä¸ç®å¨açsizeéãaçç»å°¾paddingéµå¾ªè§å3ã
ç»æä½çæ»é¿åº¦åºè¯¥æ¯æ宽åºæ¬ç±»åæå大å°çæ´æ°åï¼å¦ææ宽çå°äº4ï¼é£å°±æ²¡å
³ç³»ï¼å¦ææ宽ç大äº4ï¼æ4对é½ã
ä½ å¯ä»¥è¯è¯è¿ä¸ªï¼
#include
using namespace std;
#pragma pack(4)
struct as{
double d1;
char c1;
};
int main()
{
cout << sizeof(as) << endl;
return 0;
}
ç»ææ¯12ï¼å 为doubleå 8个ï¼charå 1个ï¼pack(4)ä¹åæ4对é½ãæåå°±æ¯8+1+(3)=12.
struct m {short a;short b;short c;}
为6 ï¼ä¸ºä»ä¹ä¸è®¾è®¡ä¸ºæ4åè对é½å¢ ï¼ å
åå æ éï¼å®å æ®ç6åèåé¢è¿æ¯è¦é2个åèæå¼å§æ°çåå¨ï¼å 为32ä½çï¼%4==0æå¿«ï¼ ï¼åæç
§è§å3ï¼sizeofï¼ï¼åååªå¼æ6ï¼ä¸ç´æ¥å¼æ8ï¼éé£2个åèï¼ä¸å¡«å
ï¼ä¹æ²¡æ³ç¨ï¼ä¸ç¨ï¼ï¼æ以ä¸ç¥éè¿æ ·è®¾è®¡çåå ã
å¸æé«æ继ç»ç»äºæç¹ ããããããã谢谢
åèèµæï¼http://blog.csdn.net/nellson/article/details/5293588