2012-07-27 10 views
6

सी ++ में, क्या लंबे समय तक int का उपयोग करने के लिए कोई लाभ है?सी ++ int बनाम लंबे

ऐसा लगता है कि x86 और x86_64 आर्किटेक्चर के लिए डिफ़ॉल्ट शब्द आकार (x86 पर 32 बिट्स और x86_64 पर 64 बिट्स, जबकि int दोनों पर 32 बिट्स हैं), जो अंकगणित करते समय (सैद्धांतिक रूप से) तेज होना चाहिए।

सी ++ मानक गारंटी देता है कि आकार (int) < = आकार (लंबा), फिर भी ऐसा लगता है कि 32-बिट और 64-बिट सिस्टम दोनों पर डिफ़ॉल्ट आकार लंबा है, इसलिए जहां संभव हो वहां int का उपयोग किया जाना चाहिए कोड लिखने की कोशिश करते समय जो दोनों आर्किटेक्चर पर पोर्टेबल है?

+1

विंडोज़ पर, 'लंबा' 32-बिट है। लिनक्स पर, 'लम्बी' 64-बिट्स है। इससे बहुत सारे एप्लिकेशन टूट जाते हैं। – Mysticial

+0

संबंधित: [सी ++ में int और लंबे समय के बीच क्या अंतर है?] (Http://stackoverflow.com/q/271076/11343) – CharlesB

उत्तर

1

तेज़ क्या है और ऐसा कुछ नहीं है जो हर दिन भविष्यवाणी करने में कठिन हो रहा है। इसका कारण यह है कि प्रोसेसर अब "सरल" नहीं हैं और उनके पीछे सभी जटिल गतिशीलता और एल्गोरिदम के साथ अंतिम गति उन नियमों का पालन कर सकती है जो पूरी तरह से अंतर्ज्ञानी हैं।

केवल मापने और निर्णय लेने का एकमात्र तरीका है। यह भी ध्यान रखें कि जो तेजी से है, वह छोटे विवरणों पर निर्भर करता है और यहां तक ​​कि संगत CPUs के लिए भी एक के लिए अनुकूलन दूसरे के लिए निराशाजनक हो सकता है। बहुत ही महत्वपूर्ण भागों के लिए कुछ सॉफ्टवेयर प्रोग्राम प्रारंभिकरण के दौरान रन टाइम पर अलग-अलग दृष्टिकोणों के लिए समय की कोशिश करता है और जांच करता है।

उसने कहा, एक सामान्य नियम के रूप में आपके पास int है। आपको अन्य पूर्णांक का उपयोग केवल तभी करना चाहिए जब आपको उन्हें विशेष रूप से आवश्यकता हो (उदाहरण के लिए यदि long बड़ा है और आपको उच्च परिशुद्धता की आवश्यकता है, या short छोटा है लेकिन पर्याप्त है और आपको स्मृति को सहेजने की आवश्यकता है)।

यदि आपको किसी विशिष्ट आकार की आवश्यकता है तो भी बेहतर होगा, फिर एक निश्चित मानक प्रकार का उपयोग करें या के आसपास छिड़कने के बजाय typedef जोड़ें जहां आपको इसकी आवश्यकता है। इस तरह विभिन्न कंप्यूटर्स और आर्किटेक्चर का समर्थन करना आसान होगा और भविष्य में कोड पढ़ने वाले किसी भी व्यक्ति के लिए इरादा स्पष्ट होगा।

5

long जबकि int केवल कम से कम 16-बिट होने की गारंटी है कम से कम 32-बिट होने की गारंटी है। एक पूरी तरह से पोर्टेबल प्रोग्राम लिखते समय आप long का उपयोग कर सकते हैं जहां int की गारंटीकृत आकार आपकी आवश्यकताओं के लिए पर्याप्त नहीं है।

अभ्यास में, हालांकि, कई लोग अंतर्निहित धारणा करते हैं कि int मानक गारंटी से बड़ा है क्योंकि वे केवल ऐसे प्लेटफ़ॉर्म को लक्षित कर रहे हैं। इन परिस्थितियों में यह आमतौर पर ज्यादा मायने रखता नहीं है।

int सिस्टम के लिए संख्या का "प्राकृतिक" आकार होना चाहिए; सिद्धांत में long अधिक महंगा हो सकता है लेकिन long पर कई आर्किटेक्चर ऑपरेशंस पर अधिक महंगा नहीं है, जहां long वास्तव में int से अधिक लंबा है।

4

यदि आपको पूर्णांक प्रकारों की आवश्यकता है जो विभिन्न प्लेटफार्मों में एक ही आकार के बने रहेंगे, तो आप <stdint.h> में प्रकार चाहते हैं।

उदाहरण के लिए, यदि आपको बिल्कुल 32-बिट हस्ताक्षरित पूर्णांक की आवश्यकता है, तो आप uint32_t चाहते हैं। यदि आपको बिल्कुल 64-बिट हस्ताक्षरित पूर्णांक की आवश्यकता है, तो आप int64_t चाहते हैं।

+0

सहमत हैं। लेकिन कृपया जितना संभव हो सके 'xintX_t' प्रकारों का उपयोग करें।यदि कोड को कम क्षमा करने वाले CPU आर्किटेक्चर पर पोर्ट किया गया है तो ये प्रदर्शन को गंभीर रूप से प्रभावित कर सकते हैं। – wallyk

+0

@ वैलीक: निश्चित रूप से कोडों के आकार के बारे में धारणाओं के कारण बगैर होने के कारण अब और भी अधिक दर्द नहीं होता है, इसलिए मैं प्रदर्शन दंड को बग्गी कोड का जोखिम दूंगा (बेशक कोड को आकार के बारे में अधिक धारणा नहीं करना चाहिए प्रकार के फिर मानक द्वारा गारंटीकृत क्या है, लेकिन यह अभी भी अक्सर होता है) – Grizzly

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