मैं अपनी परियोजना के लिए किसी और के C ++ कोड की समीक्षा कर रहा हूं जो उच्च-प्रदर्शन कंप्यूटिंग के लिए MPI का उपयोग करता है (10 ^ 5 - 10 ^ 6 कोर)। कोड का उद्देश्य विभिन्न आर्किटेक्चर पर विभिन्न मशीनों के बीच संचार की अनुमति देना है। उन्होंने एक टिप्पणी लिखी है जिसमें कहा गया है:
हम सामान्य रूप से उपयोग करेंगे
new
औरdelete
, लेकिन यहां मैं उपयोग कर रहा हूंmalloc
औरfree
। यह आवश्यक है क्योंकि कुछ संकलक डेटाnew
का उपयोग करते समय अलग-अलग तरीके से पैड करेंगे , जिससे विभिन्न प्लेटफार्मों के बीच डेटा स्थानांतरित करने में त्रुटि हो सकती है। ऐसा नहीं होता हैmalloc
।
यह मानक new
बनाम malloc
प्रश्नों से मुझे ज्ञात किसी भी चीज के साथ फिट नहीं है ।
नए / डिलीट और मॉलोक / फ्री में क्या अंतर है? इस विचार से संकेत मिलता है कि संकलक किसी वस्तु के आकार की गणना अलग-अलग तरीके से कर सकता है (लेकिन तब वह उपयोग करने से अलग क्यों होता है sizeof
)।
मॉलॉक और प्लेसमेंट नया बनाम नया एक काफी लोकप्रिय सवाल है, लेकिन केवल उन new
कंस्ट्रक्टरों का उपयोग करने के बारे में बात malloc
करता है, जहां यह प्रासंगिक नहीं है।
मॉलोक संरेखण को कैसे समझता है? कहते हैं कि स्मृति को new
या तो ठीक से संरेखित करने की गारंटी है या malloc
जो मैंने पहले सोचा था वह है।
मेरा अनुमान है कि उसने अतीत में कुछ समय के लिए अपने स्वयं के बग को गलत बताया new
और malloc
उसे घटाया और अलग-अलग मात्रा में पैडिंग दी, जो मुझे लगता है कि शायद सच नहीं है। लेकिन मुझे Google या किसी भी पिछले प्रश्न का उत्तर नहीं मिल रहा है।
मेरी मदद करो, StackOverflow, तुम मेरी ही उम्मीद कर रहे हैं!
malloc
और new
, जैसा new
कि कुछ वातावरण में एक ब्लॉक आवंटित करते हैं, कुछ डेटा को शुरुआत में जोड़ता है और इस डेटा के ठीक बाद एक पॉइंटर को एक स्थान पर लौटाता है। (मैं डेटा ब्लॉक के अंदर अन्य लोगों से सहमत हूं, malloc
और new
एक ही तरह के पैडिंग का उपयोग करना चाहिए।)