मुझे स्मृति आवंटित करने की आवश्यकता है, लेकिन मैं malloc
का उपयोग नहीं कर सकता क्योंकि यह पुनर्वित्त नहीं है, इसलिए मूल रूप से मैं POSIX mmap
फ़ंक्शन का उपयोग करके गतिशील स्मृति आवंटन को कार्यान्वित करूंगा। क्या mmap
का उपयोग करना संभव है?स्मृति आवंटित करने के लिए mmap का उपयोग करें
उत्तर
संपादित करें: धागा सुरक्षित
malloc द्वारा प्रतिस्थापित रैत्रांत धागा सुरक्षित सबसे ओएस पर है।
आप किस का उपयोग कर रहे हैं और क्या आप वाकई थ्रेड-सुरक्षित नहीं हैं? या क्या आपको इसे पुनर्वित्त करने की आवश्यकता है (मुझे नहीं लगता)?
मैं glibc में उपयोग कर रहा हूं, इसलिए मुझे लगता है कि यह एक गैर-पुनर्वित्त समारोह है। क्या आपको लगता है कि मैं मॉलोक का उपयोग कर सकता हूं? – domlao
अधिकांश प्रणालियों पर आज malloc थ्रेड-सुरक्षित है लेकिन पुनर्वित्त नहीं है। – janneb
हां आप glibc malloc का उपयोग कर सकते हैं। जैसा कि जेनब कहते हैं, यह थ्रेड-सुरक्षित है और पुनर्वित्त नहीं है, लेकिन मुझे लगता है कि आपको यही चाहिए। –
हां, mmap() पुनर्विक्रेता होना चाहिए ताकि आप इसका उपयोग कर सकें। ध्यान दें कि mmap() अक्सर एक धीमी गति से ऑपरेशन होता है, इसलिए आप संभवतः उन लोगों (अपेक्षाओं से) कुछ और दूर उन मामलों के बीच बेहतर तरीके से उपयोग कर सकते हैं जहां सामान्य उद्देश्य malloc() प्रतिस्थापन के बजाय, वास्तव में इसकी आवश्यकता होती है।
POSIX 2008 में एसिंक-सिग्नल-सुरक्षित फ़ंक्शंस की एक सूची है जो सिग्नल हैंडलर फ़ंक्शन से कॉल करने के लिए सुरक्षित है (लिंक में खंड 2.4.2 में तालिका देखें)। mmap() उस सूची में नहीं है, यानी, सिग्नल हैंडलिंग फ़ंक्शन से mmap() को कॉल करने के परिणामस्वरूप अपरिभाषित व्यवहार हो सकता है।
सिग्नल हैंडलर में स्मृति आवंटित करने से बचने के लिए आप क्या कर सकते हैं, बस कुछ ध्वज सेट करें और बाद में वास्तविक कार्य करें।
यह हमेशा काम नहीं करता है, उदाहरण के लिए यदि सिग्नल हैंडलर का कार्य सिग्नल डेटा (बाद में प्रसंस्करण के लिए) को सहेजना है। malloc() reentrancy के कारण इस्तेमाल नहीं किया जा सकता है, ढेर का उपयोग नहीं किया जा सकता है क्योंकि यह हैंडलर रिटर्न पर नष्ट हो जाएगा, इस तरह ओपी ने कुछ असामान्य कामकाज पर विचार करना शुरू किया। – peterh
- 1. mmap का उपयोग करके आवंटित स्मृति को कैसे मुक्त करें?
- 2. आवंटित स्मृति को कम करने के लिए रीयलोक का उपयोग
- 3. क्या होगा यदि मैं malloc के बजाय mmap का उपयोग कर स्मृति आवंटित करता हूं?
- 4. आवंटित स्मृति का दृश्य
- 5. उद्देश्य-सी में, कैसे आवंटित करने के लिए आवंटित स्मृति को आवंटित किया जाता है?
- 6. एंड्रॉइड - आवंटित स्मृति प्राप्त करें
- 7. MAP_NORESERVE रिजर्व भौतिक स्मृति के साथ mmap करता है?
- 8. mmap()
- 9. स्थानीय सी ++ वेक्टर आवंटित करने के लिए स्मृति कहां है?
- 10. आप mmap
- 11. playframework - IOException स्मृति आवंटित करने में असमर्थ
- 12. SysV या POSIX साझा स्मृति बनाम mmap() का उपयोग क्यों करें?
- 13. mmap (2) बनाम mmap (3)
- 14. जावा में स्मृति को एक्सेस करने का सबसे अच्छा तरीका क्या है, mmap के समान?
- 15. 16 बाइट संरेखण के साथ स्मृति आवंटित कैसे करें?
- 16. त्रुटियों के दौरान पहले आवंटित स्मृति को कैसे मुक्त करें?
- 17. जहां स्थिर आवंटित करते समय स्मृति आवंटित की जाती है?
- 18. कम स्मृति स्थितियों में सी ++ में स्मृति को सही ढंग से आवंटित करने के लिए कैसे करें
- 19. एंड्रॉइड 4.0.3 एमुलेटर क्रैश: स्मृति आवंटित करने में विफल: 8
- 20. गणित स्मृति उपयोग को कैप करने के लिए सही तरीका?
- 21. जेएस फ़ंक्शन कॉल कितने महंगे हैं (एक चर के लिए स्मृति आवंटित करने की तुलना में)?
- 22. Marshal.AllocHGlobal द्वारा आवंटित स्मृति को शून्य कैसे करें?
- 23. जावास्क्रिप्ट में कितनी चर आवंटित स्मृति आवंटित की जाती है?
- 24. आर की आरक्षित स्मृति आवंटित सरणी
- 25. सी ++ गतिशील रूप से आवंटित स्मृति
- 26. .NET Framework में कौन से प्रबंधित वर्ग आवंटित स्मृति (या उपयोग) आवंटित करते हैं?
- 27. सी ++ ढेर और ढेर पर स्मृति आवंटित?
- 28. बनाना std :: vector गठबंधन स्मृति आवंटित
- 29. दो प्रक्रियाओं के बीच संवाद करने के लिए साझा स्मृति का उपयोग कैसे करें
- 30. मैन्युअल रूप से आवंटित बफर के बिना sprintf का उपयोग
"पुनर्विक्रेता" आमतौर पर 'मॉलोक' जैसे सभी पत्ते कार्यों को शामिल करने के लिए समझा जाता है। 'malloc' में आपके कोड पर कॉलबैक तंत्र नहीं है, इसलिए कोई रास्ता नहीं है कि आप इसे फिर से दर्ज कर सकें (उसी धागे पर)। कोई भी पुनर्वित्त पूरी तरह से भीतर और मानक पुस्तकालय के नियंत्रण में होगा। – MSalters
@MSalters: संभवतः वह एक सिग्नल हैंडलर में स्मृति आवंटित करना चाहता है, जिस स्थिति में malloc() पुनर्विक्रेता नहीं है एक समस्या है। – janneb
@janneb: क्या यह वैसे भी अस्वीकृत नहीं है? – MSalters