यूनिक्स दुनिया में, 64-बिट प्लेटफ़ॉर्म के लिए पूर्णांक और पॉइंटर्स के आकार के लिए कुछ संभावित व्यवस्थाएं थीं। दोनों व्यापक रूप से उपयोग किए जाने वाले आईएलपी 64 थे (असल में, इसका केवल कुछ ही उदाहरण थे; क्रे एक ऐसा था) और एलपी 64 (लगभग बाकी सब कुछ के लिए)। Acronynms 'int, long, पॉइंटर्स 64-बिट' और 'लंबे, पॉइंटर्स 64-बिट' से आते हैं।
Type ILP64 LP64 LLP64
char 8 8 8
short 16 16 16
int 64 32 32
long 64 64 32
long long 64 64 64
pointer 64 64 64
ILP64 प्रणाली LP64 के पक्ष (में छोड़ दिया गया था वह यह है कि लगभग सभी बाद में इस्तेमाल किया LP64 नवागंतुकों, एस्पेन समूह की सिफारिशों के आधार, केवल 64-बिट आपरेशन की एक लंबी विरासत के साथ एक अलग सिस्टम का उपयोग योजना)। सभी आधुनिक 64-बिट यूनिक्स सिस्टम एलपी 64 का उपयोग करते हैं। मैकोज़ एक्स और लिनक्स दोनों आधुनिक 64-बिट सिस्टम हैं।
माइक्रोसॉफ्ट 64-बिट में संक्रमण के लिए एक अलग योजना का उपयोग करता है: एलएलपी 64 ('लंबा लंबा, पॉइंटर्स 64-बिट')। इसका अर्थ यह है कि 32-बिट सॉफ़्टवेयर को बिना किसी परिवर्तन के बदला जा सकता है। यह हर किसी के काम से भिन्न होने का विचलन है, और 64-बिट क्षमताओं का फायदा उठाने के लिए कोड को संशोधित करने की भी आवश्यकता है। हमेशा संशोधन आवश्यक था; यह यूनिक्स प्लेटफॉर्म पर आवश्यक लोगों से संशोधन का एक अलग सेट था।
यदि आप अपने सॉफ़्टवेयर को प्लेटफ़ॉर्म-तटस्थ पूर्णांक प्रकार के नामों के आसपास डिज़ाइन करते हैं, तो शायद C99 <inttypes.h>
शीर्षलेख का उपयोग करके, जो प्लेटफॉर्म पर उपलब्ध होते हैं, हस्ताक्षर किए गए (सूचीबद्ध) और हस्ताक्षरित (सूचीबद्ध नहीं) में प्रदान करता है, इसके साथ उपसर्ग 'यू'):
int8_t
- 8 बिट पूर्णांकों
int16_t
- 16-बिट पूर्णांक
int32_t
- 32-बिट पूर्णांक
int64_t
- 64-बिट में tegers
uintptr_t
- अहस्ताक्षरित पूर्णांकों काफी बड़ा संकेत
intmax_t
धारण करने के लिए - मंच पर पूर्णांक के सबसे बड़े आकार (से बड़ा int64_t
हो सकता है)
फिर आप जहां यह मायने रखता है इन प्रकार का उपयोग कर अपने आवेदन कोड कर सकते हैं , और सिस्टम प्रकारों से बहुत सावधान रहना (जो अलग हो सकता है)। intptr_t
प्रकार है - पॉइंटर्स रखने के लिए एक हस्ताक्षरित पूर्णांक प्रकार; आपको इसका उपयोग न करने की योजना बनाना चाहिए, या केवल दो uintptr_t
मानों (ptrdiff_t
) के घटाव के परिणामस्वरूप इसका उपयोग करना चाहिए।
लेकिन, जैसा कि प्रश्न बताता है (अविश्वास में), 64-बिट मशीनों पर पूर्णांक डेटा प्रकारों के आकार के लिए अलग-अलग सिस्टम हैं। इस्की आद्त डाल लो; दुनिया बदलने वाला नहीं है।
स्रोत
2008-12-21 17:03:11
एमएसवीसी ++ int और लंबे समय तक विंडोज़ पर 32-बिट हैं: https://msdn.microsoft.com/en-us/library/3b2e7499.aspx। हालांकि, उदाहरण के लिए अनुमति 4 जी से अधिक वस्तुओं को स्टोर करने के लिए वैक्टर, size_t 64 बिट है। इसलिए किसी को int को फिर से करने के बजाय int64_t का उपयोग करने की आवश्यकता है उदा। वेक्टर जिनमें 4 जी से अधिक आइटम हो सकते हैं। –
** सिगविन ** ['आकार (लम्बा) == 8', यहां तक कि विंडोज़ पर] (http://stackoverflow.com/a/39207744/485343) :-) – rustyx
@ सर्जरोगैच उन्हें 'size_t' या' 'it' या' int64_t' –