जब आप एक struct की घोषणा, compilers के सबसे सुनिश्चित करें कि वे (आमतौर पर पैडिंग बाइट्स प्रकार के आकार की एक बहु कर रहे हैं) स्मृति में उचित पतों पर गठबंधन कर रहे हैं के सदस्यों के बीच पैडिंग बाइट्स डालें। यह संकलक को इन सदस्यों को प्राप्त करने में अनुकूलित पहुंच प्राप्त करने में सक्षम बनाता है।
#pragma pack(1)
विशेष संरेखण के साथ संरचना सदस्यों को पैक करने के लिए संकलक को निर्देश देता है। 1
यहां संकलक को सदस्यों के बीच कोई पैडिंग डालने के लिए नहीं कहता है।
तो हाँ, एक निश्चित प्रदर्शन दंड है जब से तुम क्या यह स्वाभाविक रूप से प्रदर्शन optimization.Also के लिए क्या करना होगा परे कुछ करने के लिए संकलक मजबूर, कुछ प्लेटफॉर्म मांग है कि वस्तुओं विशिष्ट सीमा पर और unalighed का उपयोग कर गठबंधन किया संरचनाएं आपको सेगमेंटेशन दोष दे सकती हैं।
आदर्श रूप से, डिफ़ॉल्ट प्राकृतिक संरेखण नियमों को बदलने से बचने के लिए सबसे अच्छा है। लेकिन अगर 'प्रगमा पैक' निर्देश को बिल्कुल भी नहीं बचाया जा सकता है (जैसा कि आपके मामले में), तो मूल पैकिंग योजना को उन संरचनाओं की परिभाषा के बाद बहाल किया जाना चाहिए जिनके लिए तंग पैकिंग की आवश्यकता होती है।
उदाहरण के लिए:
//push current alignment rules to internal stack and force 1-byte alignment boundary
#pragma pack(push,1)
/* definition of structures that require tight packing go in here */
//restore original alignment rules from stack
#pragma pack(pop)
स्रोत
2011-10-17 12:13:06
मुझे यह भी नहीं पता था कि जीसीसी '#pragma पैक' का समर्थन करता है। ऐसा नहीं है कि मैं अब इसका उपयोग करने जा रहा हूं। –
@ लार्समैन हाँ विंडोज़ के कारण ऐसा करता है: http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas।एचटीएमएल – Nicolas