2010-09-24 8 views
6

साथ में कमी मैं this question में कोड के इस छोटे से टुकड़े का सामना करना पड़ा, & पता करने के लिए,realloc

realloc() समारोह कभी किसी अन्य स्थान पर एक स्मृति ब्लॉक को स्थानांतरित कर सकते हैं, जब स्मृति स्थान shrinked है की ओर इशारा किया चाहते थे?

int * a = malloc(10*sizeof(int)); 
int * b = realloc(a, 5*sizeof(int)); 

यदि संभव हो, किन स्थितियों में, मैं उम्मीद कर सकते हैं b अंतर्गत, एक पता है कि a में से अलग करने के लिए?

उत्तर

12

किसी भी कॉल पर स्मृति को स्थानांतरित करने के लिए realloc के लिए यह संभव है। कई कार्यान्वयन में सच है कि एक संकोच के परिणामस्वरूप ढेर में आरक्षित आकार में परिवर्तन होगा और स्मृति को स्थानांतरित नहीं किया जाएगा। हालांकि कम विखंडन के लिए अनुकूलित एक ढेर में यह स्मृति को बेहतर फिटिंग स्थान पर ले जाने का विकल्प चुन सकता है।

किसी भी ऑपरेशन के लिए उसी स्थान पर स्मृति रखने पर realloc पर निर्भर न करें।

+1

बस किसी भी संदेह को दूर करने के लिए, मुझे वास्तव में आईओएस 6 पर इस स्थिति का सामना करना पड़ा है जहां 40K से 224 बाइट्स का एक रीयलोक वास्तव में स्मृति को एक नए स्थान पर ले जाता है। – sup

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