नमस्कार, गोफ़र्स! गोलांग के साथ काम करने के शुरुआती वर्ष के दौरान, मैं सोचता रहा कि खेतों का क्रम होना चाहिए और मैंने सोचा कि मुझे इसके बारे में परेशान क्यों होना चाहिए? खैर, ये केवल फ़ील्ड हैं, केवल कुछ गलत हो सकता है, मैं सही हूँ? अधिकांश अन्य नौसिखियों की तरह, मैंने सोचा कि इससे परेशान होने लायक नहीं है। दूसरे शब्दों में, यह कितना महत्वपूर्ण हो सकता है कि किसी संरचना में कुछ क्षेत्रों को एक विशिष्ट क्रम में रखा जाएगा? ख़ैर, बहुत बढ़िया डील!
फील्ड ऑर्डरिंग शुरुआत में नजरअंदाज किए गए पहलुओं में से एक है, लेकिन जैसे-जैसे कोई ट्यूटोरियल के साथ आगे बढ़ता है, विशेष रूप से गो पॉइंटर्स के साथ कैसे काम करता है, यह समझ बहुत महत्वपूर्ण हो जाती है। दरअसल, जब एप्लिकेशन के प्रदर्शन में सुधार की बात आती है, खासकर बड़े डेटा सेट या मेमोरी पर बहुत भारी संचालन के साथ काम करते समय, यह क्रम महत्वपूर्ण होता है। उस दुर्भाग्यपूर्ण कमी को बेहतर ढंग से समझने में सुधार किया जाएगा कि गो फील्ड ऑर्डरिंग के साथ यह इतना महत्वपूर्ण क्यों है।
जब मेमोरी में रखा जाता है, तो स्ट्रक्चर्स को लगातार मेमोरी के एक ब्लॉक के रूप में दर्शाया जाता है, जिसमें सभी फ़ील्ड एक संरचना में उनकी परिभाषा के अनुसार एक के बाद एक स्थित होते हैं। यह अपेक्षाकृत सरल लग सकता है, लेकिन इस प्रकार का रैखिक संगठन कुछ महत्वपूर्ण प्रभाव भी निभाता है, विशेष रूप से मेमोरी संरेखण और पैडिंग जैसे क्षेत्रों में।
मेमोरी संरेखण इस बारे में है कि डेटा को मेमोरी से कैसे रखा और एक्सेस किया जाता है। आम तौर पर, सीपीयूएस में डेटा को मेमोरी में लाने के संदर्भ में पूर्वाग्रह हो सकता है, जिसे संरेखण सीमाएँ कहा जाता है। उदाहरण के लिए, 32 बिट पूर्णांक को चौथे बाइट पते से रखा या लाया जाना चाहिए। ऐसे मामलों में जहां आपकी संरचना में ऐसे फ़ील्ड हैं जो ठीक से संरेखित नहीं हैं, पृष्ठों के माध्यम से फ़्लिक करते हुए, एक गो कंपाइलर पैडिंग बाइट्स जोड़ सकता है, इत्यादि। ये काफी फिजूलखर्ची हो जाती है. उदाहरण के लिए, इस संरचना को देखें।
struct example{ a bool // 1 byte b int32 // 4bytes; c bool // 1byte d int64 //8 bytes }
संरेखण नियमों के कारण इस अनुचित संरचना में, गो कंपाइलर इन फ़ील्ड के बीच में एक या अधिक पैडिंग बाइट जोड़ सकता है:
ए 1 बाइट है लेकिन बी चाहता है 4 बाइट्स संरेखित करें इसलिए पैडिंग 3बाइट्स डाली गई है
b लंबाई 4बाइट्स
सी की लंबाई 1 बाइट है, लेकिन डी को संरेखित करने के लिए 8 बाइट्स की आवश्यकता होती है, वहां 7एजिंग है इसलिए पैडिंग पेश की गई है।
d लंबाई 8 बाइट्स
लकड़ी संरचनात्मक लकड़ी कैसे हो, फिर भी पैरों के कारण आकार में 24 है, हालांकि सामग्री केवल 14 लेती है, हालांकि वास्तविक सामग्री की मात्रा और पैडिंग को देखें .
फ़ील्ड ऑर्डर और संरचना खोज नकारात्मक मार्जिन के रूप में स्थान बर्बाद करने से बचने में मदद कर सकती है। दूसरे शब्दों में:
type Example struct { d int64 // 8 bytes b int32 // 4 bytes a bool // 1 byte c bool // 1 byte }
उपरोक्त अनुकूलित संरचना में:
d का स्थान 8 बाइट्स है।
b का स्थान 4 बाइट्स है।
ए और सी पैडिंग की आवश्यकता के बिना प्रत्येक 1 बाइट पर कब्जा कर लेते हैं।
यह संरचना अब केवल 16 बाइट्स आकार की है और यह पिछली 24 बाइट आकार की संरचना से बेहतर है।
जैसा कि कोई सामान्य छोटे पैमाने के अनुप्रयोगों पर विचार करता है, वह संभवतः एप्लिकेशन द्वारा उपयोग की जाने वाली मेमोरी की मात्रा को बाद वाले से अलग नहीं पाएगा। हालांकि, निर्माण में ऐसा नहीं है, जहां प्रदर्शन और यहां तक कि मेमोरी स्पेस महत्वपूर्ण हैं, एक एम्बेडेड सिस्टम, सुपर फास्ट हाई फ़्रीक्वेंसी ट्रेडिंग एप्लिकेशन, या ऐसे एप्लिकेशन पर विचार करें जो डेटा के जबरदस्त मात्रा को संसाधित करने के लिए हैं, ये वफादार संयम तेजी से जोड़ सकते हैं। यह तब और भी स्पष्ट हो जाता है जब कोई कई बड़े सरणियों या संरचनाओं के संयोजित स्लाइस का उपयोग करके निर्माण या संचालन करता है। जब किसी संरचना में केवल कुछ बाइट्स अधिक क्षमता होती है तो पूर्वाग्रह या लोड यूनियन को नोटिस करना उतना आसान नहीं होता है। जब कम मेमोरी आर्किटेक्चर का बड़े पैमाने पर उत्पादन किया जाता है, तो धीरे-धीरे लाखों उदाहरणों को संभालने की आवश्यकता होती है, कचरे की यह लत अब अनसुनी नहीं है।
ऑर्डरिंग फ़ील्ड न केवल गोलांग संरचना डिजाइन के दृष्टिकोण से अच्छा है बल्कि मेमोरी अनुकूलन में भी महत्वपूर्ण भूमिका निभाता है। इस पहलू को समझना कि गो आपके स्ट्रक्चर्स और उनके पिक्सल के लिए मेमोरी लेआउट कैसे करता है, व्यवहार में अधिक प्रभावी स्ट्रक्चर डिजाइन को सक्षम बनाता है। जब उन अनुप्रयोगों का संबंध होता है जो मेमोरी का भारी उपयोग करते हैं तो ऐसा महत्वहीन समायोजन काफी प्रदर्शन को बढ़ावा दे सकता है। जब आपके पास गो में किसी संरचना को परिभाषित करने का अगला अवसर आए, तो उन क्षेत्रों को इधर-उधर न फैलाएं। इसके बजाय, अनुक्रम पर विचार करने में एक मिनट बिताएं - आने वाले दिनों में आप इसके लिए अपने और अपने आवेदन के आभारी होंगे!
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3