2012-01-19 15 views
13

मैं कुछ डेटा संरचना के लिए एक पार्सर लिखता हूं, डिबगिंग के घंटों के बाद मुझे पता चला कि समस्या यह है कि विजुअल स्टूडियो संरचनाओं की व्याख्या नहीं करता है जैसा कि मैंने इसे बताया है। यह कुछ "पैडिंग" प्रयोग किया जाता हैस्थानीय रूप से पैडिंग अक्षम करें

struct foo { 
unsigned char a; //0x00 
unsigned char b; //0x01 
unsigned int c; //0x02 
unsigned int d; //0x06 
unsigned int e; //0x0A 
unsigned int f; //0x0E 
//0x12 
}; 

मैं उम्मीद "sizeof (foo) = 4 * 4 + 2 = 18" लेकिन मैं "sizeof (foo) = 20" मिल रहा है। क्या इस विशेष संरचना के लिए पैडिंग बंद करने की कोई संभावना है? मैंने

__declspec(align(1)) struct foo { ... 

लेकिन यह काम नहीं करता है। आपके सहयोग के लिए धन्यवाद।

+0

मुझे लगता है कि [MSDN पर इस लेख में मदद मिलेगी] (http://msdn.microsoft.com/en-us/library/ms253935%28v=vs। 90% 29.aspx)। –

+0

क्या आप '/ Zp 1' के साथ संकलित हैं? –

+1

@ मार्टिन ब्रॉडहर्स्ट जो वैश्विक स्तर पर पैडिंग को अक्षम कर देगा, हंस का समाधान काम करता है। – Listing

उत्तर

25

कि के लिए #pragma pack निर्देश का उपयोग करें:

#pragma pack(push, 1) 
struct foo { 
    // etc.. 
}; 
#pragma pack(pop) 
+0

धन्यवाद, एक आकर्षण की तरह काम करता है। – Listing

2

विजुअल स्टूडियो 2010 में #pragma pack है जो आप ढूंढ रहे हैं।

+0

लेकिन क्या यह सभी structs को प्रभावित नहीं करेगा? मैं बस इसे एक ही संरचना के लिए स्थानीय रूप से चाहता हूं। – Listing

+1

आप इसे बाद में वापस कर सकते हैं - क्या आपने उस दस्तावेज़ को भी पढ़ा? –

+1

आप इसके आसपास पाने के लिए #pragma पैक पुश/पॉप का उपयोग कर सकते हैं। संरचना के बाद बस धक्का और पॉप। –

संबंधित मुद्दे