बस पर OSX इस देखा है और मैं इसे उत्सुक मैं पूर्णांक से भी बड़ा होने के लिए लंबे समय से अपेक्षित रूप से पाया जाता है। क्या उन्हें एक ही आकार बनाने के लिए कोई अच्छा कारण है?मुझे लगता है कि इनट्स और लम्बे समय के समान आकार हैं। क्यूं कर?
उत्तर
यह सी और सी ++ भाषा विनिर्देशों में आकार परिभाषाओं की ढीली प्रकृति का परिणाम है। मेरा मानना है कि सी विशिष्ट न्यूनतम आकार है, लेकिन सी ++ में केवल नियम यह है:
1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)
इसके अलावा, sizeof(int)
और sizeof(long)
सभी प्लेटफार्मों पर एक ही आकार नहीं हैं। हर 64-बिट मंच के साथ मैं long
पड़ा है काम किया है एक 64-बिट वास्तुकला पर, प्राकृतिक शब्द के आकार के एक 32-बिट वास्तुकला पर तो 32 बिट, और 64 बिट्स।
int आर्किटेक्चर का प्राकृतिक शब्द आकार माना जाता है। पुराने दिनों में, मूल आईबीएम पीसी की तरह 16 बिट मशीनों पर, 16 बिट्स और लंबे समय तक 32 बिट्स थे। 68000 श्रृंखलाओं की तरह 32 बिट मशीनों पर, इनट्स अभी भी "प्राकृतिक शब्द आकार" थे, जो अब 32 बिट्स थे, और लंबे समय तक 32 बिट्स पर बने रहे। समय के साथ, देशांतर 64 बिट्स होने की वृद्धि हुई है, और फिर हम इंटेल कोर 2 की तरह 64 बिट आर्किटेक्चर का उपयोग शुरू किया, और इसलिए मैं पूर्णांक अभी या बाद में 64 बिट्स के लिए विकसित करने के लिए उम्मीद है।
दिलचस्प तथ्य: कोर 2 डुओ और मैक ओएस एक्स 10.5 के साथ, मेरे लैपटॉप पर, int और long 32 बिट्स दोनों हैं। मेरे लिनक्स बॉक्स पर, कोर 2 डुओ और उबंटू के साथ, int 32 बिट्स और 64 बिट्स लंबा है।
साल पहले, मुझे नौकरी साक्षात्कार में पूछा गया था जहां एक 3 सूचकांक जोड़ने के बाद एक इंट पॉइंटर होगा। मैंने जवाब दिया "3 बार आकार (int) अतीत जहां यह अब है"। साक्षात्कारकर्ता मुझे दबाया, और मैं ने कहा कि यह वास्तुकला पर निर्भर करेगा, क्योंकि (उस समय) Windows 16 बिट ints थे, लेकिन बाद से मैं यूनिक्स प्रोग्रामिंग कर रहा था मैं और अधिक 32 बिट ints इस्तेमाल किया गया था। मुझे नौकरी नहीं मिली - मुझे संदेह है कि साक्षात्कारकर्ता को इस तथ्य को पसंद नहीं आया कि मैं उससे ज्यादा जानता था।
मुझे नहीं लगता कि int कोर 2 पर 64 बिट्स है। मुझे लगता है कि यह बहुत लंबा है कि उगाया गया है। कम से कम, यह 64-बिट डेबियन पर मेरा अनुभव रहा है। – Tom
आप सही हैं, टॉम, मेरे मैकबुकप्रो पर int और long दोनों 4 बाइट हैं। –
यह हार्डवेयर नहीं बल्कि कंपोजर चुनता है जो चुनता है। सटीक उसी हार्डवेयर में ओएस और कंपाइलर के आधार पर अलग-अलग int और लंबे आकार हो सकते हैं। इंटेल कोर 2 जोड़ी पर मैकॉक्स में जीसीसी डिफ़ॉल्ट रूप से 32 बिट int/long उत्पन्न करेगा। -एम 64 विकल्प के साथ 32 बी int और 64b लंबा (और सूचक) उत्पन्न होगा। –
int
अनिवार्य रूप से सबसे सुविधाजनक और कुशल पूर्णांक प्रकारlong
है/था सबसे बड़ा पूर्णांक प्रकारshort
छोटी से छोटी पूर्णांक प्रकार
तो है सबसे लंबा पूर्णांक प्रकार भी सबसे कुशल है, int
long
जैसा ही है। एक समय पहले प्लेटफॉर्म के बाद से 16 बिट व्यापक प्राकृतिक पूर्णांक था की एक संख्या पर (लगता है पूर्व 32 बिट), sizeof(int) == sizeof(short)
।
char एक पूर्णांक प्रकार है, और यह आमतौर पर छोटा से छोटा होता है। –
char थोड़ा अजीब है ... अपने आप में, कार्यान्वयन परिभाषित परिभाषित किया गया है, इसलिए यह एक अजीब प्रकार का पूर्णांक है। "Char c = -1; int i = c; हस्ताक्षरित u = c;" पर विचार करें। मैं और आप के मूल्य कार्यान्वयन परिभाषित हैं। मैं इस बात से सहमत हूं कि दोनों "हस्ताक्षरित चार" और "हस्ताक्षरित चार" पूर्णांक प्रकार हैं;) –
64-बिट सिस्टम पर अभी भी 32-बिट लंबा है, इसलिए यह सबसे बड़ा पूर्णांक प्रकार नहीं है, जैसे छोटा छोटा नहीं है । :) – jalf
int
और long
हमेशा एक ही आकार नहीं हैं, इसलिए यह न मानें कि वे कोड में हैं। ऐतिहासिक रूप से 8 बिट और 16 बिट, साथ ही साथ 32 बिट और 64 बिट आर्किटेक्चर अधिक परिचित हैं। एम्बेडेड सिस्टम के लिए छोटे शब्द आकार अभी भी आम हैं। बहुत अधिक जानकारी के लिए आईएलपी 32 और एलपी 64 के लिए नेट खोजें।
और LLP64, योजना win64 –
जैसा कि टॉम सही ढंग से इंगित करता है, सी ++ में एकमात्र मानक आकार चार है, जिसका आकार 1 (*) है। वहां से, केवल 'छोटे से' संबंधों के बीच संबंधों के बीच नहीं है। अधिकांश लोग दावा करेंगे कि यह वास्तुकला पर निर्भर करता है, लेकिन यह एक कंपाइलर/ओएस निर्णय से अधिक है। मैकोज़क्स, विंडोज (32/64 बिट्स) या लिनक्स (32/64) के समान हार्डवेयर के समान डेटा प्रकारों के लिए अलग-अलग आकार होंगे। एक ही वास्तुकला और ओएस में विभिन्न compilers विभिन्न आकारों हो सकता है।एक ही हार्डवेयर पर एक ही ओएस पर भी ठीक उसी संकलक संकलन झंडे के आधार पर अलग अलग आकार हो सकता है:
$ cat test.cpp
#include <iostream>
int main()
{
std::cout << "sizeof(int): " << sizeof(int) << std::endl;
std::cout << "sizeof(long): " << sizeof(long) << std::endl;
}
$ g++ -o test32 test.cpp; ./test32
sizeof(int): 4
sizeof(long): 4
$ g++ -o test64 test.cpp -m64; ./test64
sizeof(int): 4
sizeof(long): 8
MacOSX तेंदुए पर जीसीसी संकलक का उपयोग कर का परिणाम है कि। जैसा कि आप हार्डवेयर और सॉफ्टवेयर देख सकते हैं वही है और फिर भी आकार एक ही कोड से पैदा हुए दो निष्पादन योग्यों पर भिन्न होता है।
यदि आपका कोड आकारों पर निर्भर करता है, तो आप डिफ़ॉल्ट प्रकारों का उपयोग नहीं कर सकते हैं, लेकिन आपके कंपाइलर के लिए विशिष्ट प्रकार जो स्पष्ट आकार बनाते हैं। या कुछ पोर्टेबल पुस्तकालयों का उपयोग करना जो उस समर्थन की पेशकश करते हैं, एसीई के साथ एक उदाहरण के रूप में: संकलक/ओएस/आर्किटेक्चर के बावजूद ACE_UINT64 64 बिट्स का एक हस्ताक्षरित पूर्णांक प्रकार होगा। पुस्तकालय संकलक और पर्यावरण का पता लगाएगा और प्रत्येक प्लेटफ़ॉर्म पर उपयुक्त डेटा प्रकार का उपयोग करेगा।
(*) मैंने सी ++ मानक को फिर से जांच लिया है 3.9.1: चार आकार 'कार्यान्वयन के मूल चरित्र सेट के किसी भी सदस्य को स्टोर करने के लिए पर्याप्त' होगा। बाद में: 5.3.3: आकार (चार), आकार (हस्ताक्षरित चार) और आकार (हस्ताक्षरित चार) 1 हैं, इसलिए हाँ, एक char का आकार 1 बाइट है।
अन्य उत्तरों पढ़ने के बाद मुझे एक ऐसा पाया गया जिसमें कहा गया है कि बूल सबसे छोटा पूर्णांक प्रकार है। फिर, मानक आवश्यकताओं में ढीला है और केवल यह बताता है कि यह सच और झूठी का प्रतिनिधित्व कर सकता है लेकिन यह आकार नहीं है। मानक उस सीमा तक स्पष्ट है: 5.3.3, फुटनोट: "आकार (बूल) 1 होना आवश्यक नहीं है"।
ध्यान दें कि कुछ सी ++ कार्यान्वयन ने अन्य कारणों से 1 बाइट से बड़े बूल का उपयोग करने का निर्णय लिया है। जीसीसी के साथ ऐप्पल मैकॉक्स पीपीसी सिस्टम में, sizeof(bool)==4
।
sizeof (चार) है का उपयोग करता है हमेशा 1. हालांकि, वर्ण (नहीं ओकटेट) की संख्या में sizeof परिणाम लौटाता है। CHAR_BIT उदाहरण हो सकता है 32. –
5.3.3 के अनुसार: "आकार का ऑपरेटर अपने ऑपरेंड के ऑब्जेक्ट प्रस्तुति में बाइट्स की संख्या उत्पन्न करता है।" –
ध्यान दें कि सी या सी ++ मानकों तक 'बाइट्स' का संबंध है, octets होने की आवश्यकता नहीं है। यही कारण है कि एक बाइट में बिट्स की वास्तविक संख्या देने के लिए एक CHAR_BIT मैक्रो है (जिसे कम से कम 8 होना चाहिए) – bdonlan
- 1. आकार() संरचनाएं ज्ञात नहीं हैं। क्यूं कर?
- 2. मुझे लगता है कि NullReferenceExceptions
- 3. पाइथन, लेन, और इनट्स का आकार
- 4. Php वर्गों (मुझे लगता है कि)
- 5. जावा एमवीसी - मुझे लगता है कि मुझे यह नहीं लगता है
- 6. मुझे लगता है कि एक मशीन सीखने की समस्या
- 7. मुझे लगता है कि मुझे वेबकिट (या jQuery) में एक बग मिली है, क्या अन्य पुष्टि कर सकते हैं?
- 8. सीएसएस रीसेट: फ़ॉन्ट आकार: 100%; क्यूं कर?
- 9. char का आकार * int * के आकार के समान है?
- 10. गिट सेवा: मुझे यह आसान लगता है कि
- 11. Mercurial क्यों लगता है कि मेरी एसक्यूएल फाइल बाइनरी हैं?
- 12. मैं लम्बे आईफोन 5 स्क्रीन आकार का समर्थन कैसे करूं?
- 13. मैं इन दो लगभग समान रूबी रेगेक्स पैटर्न के लिए अलग-अलग परिणाम क्यों देख रहा हूं, और मुझे ऐसा लगता है कि मुझे क्या लगता है कि यह नहीं होना चाहिए?
- 14. मैं कैसे गणना कर सकता हूं कि jQuery में फ़ंक्शन कितना समय लगता है?
- 15. gevent StreamServer.start() ऐसा लगता है कि मैं
- 16. GL_OUT_OF_MEMORY। क्यूं कर?
- 17. mysql "ड्रॉप डेटाबेस" समय लगता है - क्यों?
- 18. विंडोज स्नैपशॉट्स का समय क्यों लगता है?
- 19. गो - घोषित और उपयोग नहीं किया गया त्रुटि, जब मुझे लगता है कि मैंने वैरिएबल
- 20. जांचें कि क्या नाम "मानव" लगता है?
- 21. ऐसा लगता है कि आप IIS7
- 22. आप सूची नामों को संक्षिप्त कर सकते हैं? क्यूं कर?
- 23. PowerShell को लगता है कि कोई ऑब्जेक्ट
- 24. आईएनएनओडीबी लॉक के साथ मुझे क्या गलत लगता है?
- 25. जांचें कि 2 आर प्रोग्राम समान हैं
- 26. PHP जांचें कि क्या सरणी समान हैं?
- 27. एप्लिकेशन को स्टार्टअप के लिए कितना समय लगता है?
- 28. डीबगिंग करते समय पीडीबी मुझे क्या प्राप्त करता है और मुझे कैसे पता चलेगा कि यह काम कर रहा है?
- 29. क्या हैश टकराव अलग फ़ाइल आकार के साथ ही फ़ाइल आकार के समान हैं?
- 30. मेरा कोड कितना समय लगता है?
अफैइक विंडोज 64-बिट एक अपवाद है। यह एलएलपी 64 है, इसलिए वहां लंबा = 32-बिट और लम्बाई 64-बिट है। यह उस पर निर्भर करता है जो आप सोचते हैं कि कार्यान्वयनकर्ता के रूप में अधिक महत्वपूर्ण है, आकार (लंबा) = आकार (सूचक) या बचाव कोड जो आकार (लंबा) = आकार (int) मानता है। एमएस ने आखिरी के लिए चुना। –
मार्को वैन डी वोर्ट एक अच्छा मुद्दा बनाता है। समय पर वापस जाकर, 16-बिट मशीनों पर, int आमतौर पर उतना ही छोटा आकार था, और लंबा, बड़ा 32-बिट आकार था। तो, एक बड़े पर्याप्त परिप्रेक्ष्य के साथ, इस बात के बारे में कोई निश्चित नियम नहीं है कि एक ही आकार के रूप में क्या है - 16-बिट लघु, 32-बिट int और 64-बिट लंबे मान वाले मशीनें थीं, मुझे विश्वास है, हालांकि वे बहुत नहीं थे लोकप्रिय क्योंकि अधिकांश कोड माना जाता है (आकार का int == आकार छोटा छोटा || आकार का int == आकार लंबा) && छोटा आकार! = आकार लंबा। –