2012-03-10 9 views
7

मैं सोच रहा था कि यह size_t क्यों उपयोग किया जाता है जहां मैं int टाइप कह सकता हूं। इसकी कहा गया है कि size_tsizeof ऑपरेटर का रिटर्न प्रकार है। इसका क्या मतलब है? जैसे कि अगर मैं sizeof(int) का उपयोग करता हूं और इसे int टाइप वैरिएबल पर वापस लौटाता हूं, तो यह भी काम करता है, इसे size_t टाइप वैरिएबल में स्टोर करना आवश्यक नहीं है। मैं तो बस स्पष्ट रूप से एक स्पष्ट रूप से समझा जा सकता example.Thanksकोई भी बता सकता है कि उदाहरण के साथ size_t प्रकार का उपयोग क्यों किया जाता है?

+0

आप आकार की वापसी को स्टोर करने के लिए एक int का उपयोग कर सकते हैं जिस तरह से आप कभी-कभी 2147483647 को एक int में स्टोर कर सकते हैं। ऐसा ही होता है कि कार्यान्वयन विशिष्ट आकार सही ढंग से मेल खाते हैं। – Lalaland

+0

यह प्रश्न भी देखें: http://stackoverflow.com/questions/918787/whats-sizeofsize-t-on-32-bit-vs-the-various-64-bit-data-models – ChrisWue

+0

क्या कोई यह पुष्टि कर सकता है कि size_t है प्रोसेसर रजिस्टरों का एक ही आकार? – arthurprs

उत्तर

9

size_t सबसे बड़े आकार संभव प्रतिनिधित्व करने में सक्षम होने की गारंटी है के साथ size_t का उपयोग कर की मूल अवधारणा को जानना चाहते हैं, int नहीं है। इसका मतलब है size_t अधिक पोर्टेबल है।

उदाहरण के लिए, int केवल 255 तक स्टोर कर सकता है लेकिन आप 5000 बाइट्स के सरणी आवंटित कर सकते हैं? स्पष्ट रूप से यह काम नहीं करेगा, हालांकि size_t के साथ यह होगा।

+1

तकनीकी रूप से 'int' कम से कम 16 बिट्स होना चाहिए इसे कम से कम सीमा [-32767..32767] तक फैलाना है। (क्यों नहीं -32768? किसी के पूरक और साइन-एंड-परिमाण प्रणाली को समायोजित करने के लिए, यदि कोई पुरानी यूनिवैक मशीन पर सी का उपयोग करना चाहता है। बेशक उनमें 18- और 36-बिट पूर्णांक हैं, 9-बिट ' char'।) – torek

+0

@torek किसी कारण से मैं इस धारणा के तहत हूं कि int केवल सी में 16 होना चाहिए, सी ++ नहीं। यद्यपि मानक की जांच नहीं की है। – Pubby

+0

@ पब्बी: सी ++ विरासत में है कि सी 1.1 पी 2 सी ++ आईएसओ/आईईसी 98 99: 1 999 प्रोग्रामिंग भाषा

4

सबसे सरल उदाहरण बहुत दिनांकित है: एक पुराने 16-बिट int सिस्टम पर राम के 64 कश्मीर के साथ, एक int का मूल्य -32,768 से 32,767 करने के लिए कहीं भी हो सकता है, लेकिन बाद:

char buf[40960]; 

बफर buf पर 40 किलोबाइट हैं, इसलिए sizeof bufint में फ़िट होने के लिए बहुत बड़ा है, और इसे unsigned int की आवश्यकता है।

एक ही बात आज तब होगा, जब 32-बिट int का उपयोग लेकिन, कार्यक्रम एक समय में राम से अधिक 4 जीबी का उपयोग करने की अनुमति के रूप में क्या "I32LP64" मॉडल (32 बिट int कहा जाता है पर मामला है सकते हैं, 64 -bit long और सूचक)। यहां size_t टाइप unsigned long जैसा ही होगा।

0

यह कार्यान्वयन परिभाषित किया गया है लेकिन 64 बिट सिस्टम पर आप पाएंगे कि size_t अक्सर 64 बिट होता है जबकि int अभी भी 32 बिट है (जब तक यह ILP64 or SILP64 मॉडल नहीं है)।

0

आप किस आर्किटेक्चर पर हैं (16-बिट, 32-बिट या 64-बिट) एक int एक अलग आकार हो सकता है।

यदि आप एक विशिष्ट आकार मैं uint16_t या uint32_t उपयोग करना चाहते हैं .... आप बाहर इस सूत्र में अधिक जानकारी के

What does the C++ standard state the size of int, long type to be?

1

आप एक ही की अहस्ताक्षरित पूर्णांकों में संकेत दिए गए कास्टिंग के लिए ज्यादातर size_t का उपयोग के लिए जाँच कर सकते हैं आकार, पॉइंटर्स पर गणना करने के लिए जैसे कि वे पूर्णांक थे, जो अन्यथा संकलन समय पर रोका जाएगा। इस तरह का कोड अलग-अलग सूचक आकारों के संदर्भ में संकलित और सही तरीके से निर्माण करना है, उदा। 64-बिट बनाम 32-बिट मॉडल।

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