मैं सी में शुरुआती हूं, गिट के स्रोत कोड को पढ़ने के दौरान, मुझे यह रैपर फ़ंक्शन malloc
पर मिला।रैपिंग मॉलोक - सी
void *xmalloc(size_t size)
{
void *ret = malloc(size);
if (!ret && !size)
ret = malloc(1);
if (!ret) {
release_pack_memory(size, -1);
ret = malloc(size);
if (!ret && !size)
ret = malloc(1);
if (!ret)
die("Out of memory, malloc failed");
}
#ifdef XMALLOC_POISON
memset(ret, 0xA5, size);
#endif
return ret;
}
प्रश्न
- मैं नहीं समझ सकता है कि वे क्यों प्रयोग कर रहे हैं
malloc(1)
? release_pack_memory
क्या करता है और मुझे पूरे स्रोत कोड में यह फ़ंक्शन कार्यान्वयन नहीं मिल रहा है।#ifdef XMALLOC_POISON memset(ret, 0xA5, size);
क्या करता है?
मैं इस परियोजना को अपने प्रोजेक्ट पर पुन: उपयोग करने की योजना बना रहा हूं। क्या यह malloc
के आसपास एक अच्छा रैपर है?
कोई भी मदद महान होगी।
मानक malloc(0)
के व्यवहार को परिभाषित नहीं करता:
कुडोस के लिए स्मृति रैपर का अच्छा सेट है - मैं चाहता हूँ अधिक डेवलपर्स ने ऐसा ही किया। – Lars
प्रश्न 2 के लिए: इसकी परिभाषा sha1_file.c में है (यह गिट की पैक ऑब्जेक्ट्स के साथ मेमोरी के लिए है, संभवतः) और इसका प्रोटोटाइप गिट-कंपैट-यूटीएच में है। (संकेत: जब तक आप गिट के स्रोत कोड पर देख रहे हों, इसे खोजने के लिए 'git grep release_pack_memory' का उपयोग करें!) – Cascabel
@Lars: धन्यवाद। @ जेफ्रोमी: 'गिट grep' के बारे में अच्छा बिंदु। –