सी/सी ++ बिटफील्ड में हार्डवेयर ड्राइवरों और बाइनरी नेटवर्क स्थानान्तरण में बहुत अधिक एप्लिकेशन लगते हैं। हालांकि वे व्यापक रूप से उपयोग नहीं किए जाते हैं और आम तौर पर निराश होते हैं, क्योंकि वास्तविक बाइनरी लेआउट कार्यान्वयन विशिष्ट है, जैसा कि सी 99 मानक 6.7.2.1/10 - "संरचना और संघ विनिर्देशक" से इस उद्धरण में देखा गया है;बिटफील्ड, कार्यान्वयन विशिष्ट क्यों?
एक कार्यान्वयन किसी भी एड्रेसेबल स्टोरेज इकाई को बिल्टफील्ड रखने के लिए पर्याप्त आवंटित कर सकता है। यदि पर्याप्त जगह बनी हुई है, तो एक बिट-फील्ड जो संरचना में एक और बिट-फील्ड का तुरंत पालन करता है उसे उसी इकाई के आसन्न बिट्स में पैक किया जाएगा। यदि अपर्याप्त स्थान बनी हुई है, चाहे एक बिट-फील्ड जो फिट नहीं है, अगली इकाई में डाल दिया गया है या आसन्न इकाइयों को ओवरलैप कार्यान्वयन-परिभाषित किया गया है। एक इकाई के भीतर बिट-फ़ील्ड के आवंटन का आदेश (उच्च-आदेश से निम्न-आदेश या उच्च-आदेश के लिए निम्न-आदेश) कार्यान्वयन-परिभाषित है। एड्रेसेबल स्टोरेज यूनिट का संरेखण अनिर्दिष्ट है।
मेरा प्रश्न अपेक्षाकृत सरल है; समिति ने कुछ क्षेत्रों को कार्यान्वित करने के लिए थोड़ा क्षेत्र छोड़ने का फैसला क्यों किया, और इस प्रकार इसे एक कंपाइलर निर्माण बना दिया, जिसका मुख्य रूप से कम स्मृति उपयोग के लिए उपयोग किया जा सकता है, जहां कई मामलों में यह अच्छा बाइनरी लेआउट प्रदान करने के लिए उपयोग किया जा सकता है, और मुफ्त बिट-फिडलिंग कोड से डेवलपर्स?
मैं कुछ कारणों की कल्पना कर सकता हूं ... अंतहीनता दिमाग में स्प्रिंग्स। लेकिन, एक बिटफाइल को आंशिक रूप से एक और आंशिक रूप से किसी अन्य बाइट में डालने के लिए प्रदर्शन प्रभाव का _lot_ होगा, ताकि समिति ने तय किया कि यह कैसे करने के लिए संकलक स्वतंत्र हैं, शायद गति या आकार अनुकूलन के उपयोगकर्ता प्राथमिकताओं के आधार पर। –
मुझे यकीन है कि प्रति बाइट बिट्स की संख्या 8 होने की आवश्यकता नहीं है इसके साथ कुछ करने के लिए भी कुछ है। –
@ एमआर लिस्टर: यह सुनिश्चित करने के लिए कि अगले बाइट में एक फ़ील्ड गठबंधन किया गया है, और इसलिए बाइट के बीच में शुरू नहीं होता है, हमें शून्य आकार बिट फ़ील्ड दिया जाता है, है ना? - तो यह पहले से ही मानक में है। – Skeen