"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > गो स्लाइस की अधिकतम लंबाई क्या है और कौन से कारक इसे निर्धारित करते हैं?

गो स्लाइस की अधिकतम लंबाई क्या है और कौन से कारक इसे निर्धारित करते हैं?

2024-12-22 को प्रकाशित
ब्राउज़ करें:951

What is the Maximum Length of a Go Slice, and What Factors Determine It?

गो में एक स्लाइस की अधिकतम लंबाई

गो में एक स्लाइस एक सरणी का एक गतिशील आकार का, लचीला दृश्य है। यह एक अंतर्निहित सरणी के सन्निहित खंड का प्रतिनिधित्व करता है। सवाल उठता है कि एक स्लाइस की अधिकतम लंबाई कितनी हो सकती है?

गो दस्तावेज़ के अनुसार, स्लाइस सूचकांक पूर्णांकों द्वारा प्रबंधित किए जाते हैं। इसलिए एक स्लाइस के लिए अधिकतम क्षमता लक्ष्य निर्माण पर डिफ़ॉल्ट पूर्णांक के आकार द्वारा सीमित होती है।

हालाँकि, स्मृति बाधाओं के कारण यह सैद्धांतिक सीमा हमेशा प्राप्त करने योग्य नहीं हो सकती है। यदि आप उपलब्ध मेमोरी से बड़े आकार का स्लाइस बनाने का प्रयास करते हैं, तो आपको एक त्रुटि का सामना करना पड़ेगा। यदि स्लाइस तत्व का आकार शून्य नहीं है तो यह या तो "घातक त्रुटि: रनटाइम: मेमोरी से बाहर" के रूप में प्रकट हो सकता है, या यदि स्लाइस तत्व का आकार शून्य है तो "पैनिक: रनटाइम त्रुटि: मेकस्लाइस: लेन सीमा से बाहर" के रूप में प्रकट हो सकता है। .

दिखाई देने वाला विशिष्ट त्रुटि संदेश इस बात पर निर्भर करता है कि स्लाइस तत्व का आकार शून्य है या नहीं। यदि तत्व का आकार शून्य है, तो "मेकस्लाइस: लेन आउट ऑफ़ रेंज" त्रुटि उत्पन्न हो जाती है क्योंकि स्लाइस का आकार अधिकतम अनुमत आकार से अधिक है। यदि तत्व का आकार शून्य नहीं है, तो "घातक त्रुटि: रनटाइम: मेमोरी से बाहर" त्रुटि उत्पन्न हो जाती है क्योंकि आवंटन उपलब्ध मेमोरी से अधिक है।

अधिकतम स्लाइस आकार को दर्शाने के लिए, आइए एक उदाहरण पर विचार करें 4जीबी मशीन पर 64-बिट लिनक्स ओएस में बूलियन स्लाइस:

package main

import (
    "fmt"
    "math"
)

func main() {
    r := make([]bool, math.MaxInt32)

    fmt.Println("Size: ", len(r))
}

जब आप यह कोड चलाते हैं, तो यह प्रिंट होता है:

Size: 2147483647

यह इंगित करता है कि बूलियन तत्व के साथ अधिकतम स्लाइस आकार int32 का अधिकतम मान है एक 64-बिट सिस्टम. यदि आप तत्व प्रकार को uint32 में बदलते हैं, जिसकी रेंज व्यापक है, तो आपको "घातक त्रुटि: रनटाइम: मेमोरी से बाहर" का सामना करना पड़ेगा क्योंकि मेमोरी आवंटन उपलब्ध रैम से अधिक है।

दिलचस्प बात यह है कि यदि आप गणित का उपयोग करते हैं .MaxInt64, जो int64 डेटा प्रकार के अधिकतम मान का प्रतिनिधित्व करता है, आपको "पैनिक: रनटाइम त्रुटि: मेकस्लाइस: लेन आउट ऑफ़ रेंज" त्रुटि का सामना करना पड़ेगा। ऐसा इसलिए है क्योंकि स्लाइस का आकार इस डेटा प्रकार के लिए अनुमत सीमा से अधिक है।

यह ध्यान रखना महत्वपूर्ण है कि ये सीमाएं लक्ष्य निर्माण और मेमोरी बाधाओं पर आधारित हैं। यदि आप शून्य आकार वाले तत्वों को आवंटित करते हैं, जैसे कि संरचना {}, तो अधिकतम स्लाइस आकार बहुत बड़ा हो सकता है, जैसा कि निम्नलिखित उदाहरण में दिखाया गया है:

package main

import (
    "fmt"
    "math"
)

func main() {
    r := make([]struct{}, math.MaxInt64)

    fmt.Println("Size: ", len(r))
}

यह कोड प्रिंट करता है:

Size: 9223372036854775807

निष्कर्ष में, गो में एक स्लाइस की अधिकतम लंबाई लक्ष्य निर्माण, मेमोरी बाधाओं और आकार पर निर्भर करती है टुकड़ा तत्व. अधिकांश व्यावहारिक उद्देश्यों के लिए, डिफ़ॉल्ट पूर्णांक के आकार द्वारा लगाई गई सीमाएँ पर्याप्त हैं। हालाँकि, यदि आपको बहुत बड़े आकार का स्लाइस बनाने की आवश्यकता है, तो मेमोरी उपयोग और संभावित त्रुटियों के निहितार्थ पर विचार करना महत्वपूर्ण है।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3