2010-10-25 2 views
8

मैं overloadded है ऑपरेटर नई [] की तरह इससी ++ ओवरलोडेड नया [] क्वेरी: पैरामीटर के रूप में यह कितना आकार लेता है?

void * human::operator new[] (unsigned long int count){ 
     cout << " calling new for array with size = " << count << endl ; 
     void * temp = malloc(count) ; 
     return temp ; 
} 

और अब बुला

human * h = new human[14] ; 

कहना sizeof(human) = 16, लेकिन गिनती यह प्रिंट 232 जो है 14 * 16 + sizeof (int *) = 224 है +8।

यह अतिरिक्त स्थान आवंटित क्यों किया जा रहा है? और यह स्मृति में कहां गिरता है? क्योंकि जब मैं *h या h[0] प्रिंट करता हूं तो मुझे एक ही परिणाम मिलते हैं, इसलिए यह स्मृति खंड की शुरुआत में नहीं है। क्या यह बिल्कुल सही है या मुझे कुछ चीज़ याद आ रही है?

+1

अच्छा सवाल। फिर भी मेरे अंदर नाइटपिकर को यह इंगित करने की ज़रूरत है कि आप मॉलोक() को एक नल पॉइंटर लौटने की जांच नहीं करते हैं। – sharptooth

+0

@ शार्पूटोथ: आपका अधिकार, लेकिन यह जानबूझकर coz था, मैं वास्तविक प्रश्न पर ध्यान केंद्रित करना चाहता था और बहुत अधिक ifs नहीं जोड़ना चाहता हूं :) आदर्श रूप से किसी को temp की जांच करने की आवश्यकता है! = 0 और कुछ अपवाद फेंक दें (bad_alloc kinda) –

+0

अतिरिक्त बाइट भंडारण के लिए हैं आवंटित बाइट्स की संख्या। लेकिन जहां यह स्टोर करता है कार्यान्वयन निर्भर है। – bjskishore123

उत्तर

6

आवंटित अतिरिक्त स्थान का उपयोग आंतरिक उपयोग के लिए सरणी के आकार को संग्रहीत करने के लिए किया जाता है (अभ्यास में delete[] जानता है कि कितना हटाना है)।

यह &h से पहले स्मृति श्रेणी के शुरू में संग्रहीत किया जाता है, तुरंत । इसे देखने के लिए, बस अपने operator new[] के अंदर temp के मान को देखें। मान &h से भिन्न होगा।

3

यह आवंटित वस्तुओं की संख्या को स्टोर करना है ताकि जब आप delete[] ऑब्जेक्ट की उचित संख्या हटा दी जाए। अधिक जानकारी के लिए यह FAQ देखें।

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