मैं लिनक्स मशीन द्वारा उपयोग किए जाने वाले गले लगाने पर स्मृति आवंटित करना चाहता हूं। मैं देखता हूं कि mmap
और madvise
का उपयोग करके ऐसा करने के दो तरीके हैं।विशाल पृष्ठों के लिए mmap और madvise का उपयोग
कि mmap
कॉल के साथ MAP_HUGETLB
ध्वज का उपयोग कर, है - madvise
कॉल के साथ
base_ptr_ = mmap(NULL, memory_size_, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0);
और MADV_HUGEPAGE
झंडा -
madvise(base_ptr_, memory_size_, MADV_HUGEPAGE);
कोई दोनों के बीच अंतर समझा सकते हैं?
तो दिया वहाँ उपलब्ध पर्याप्त पृष्ठों रहे हैं ... 'mmap' अधिक विश्वसनीय विकल्प है? क्या वो सही है? – subzero
यह निर्भर करता है, अगर आप मशीन पर मौजूद सभी चीज़ों को नियंत्रित करते हैं, और जानते हैं कि आपका प्रोग्राम कैसा व्यवहार करेगा, तो 'mmap' आपको यह निर्दिष्ट करने की अनुमति देगा कि वास्तव में व्यवहार कैसे करें। यदि आप इस बारे में अनिश्चित हैं कि स्मृति का उपयोग कैसे किया जाएगा (क्या यह खंड होगा? क्या सिस्टम में अन्य विशाल पृष्ठ उपयोगकर्ता हैं), फिर पारदर्शी हूजेज आपको अंततः सर्वोत्तम संभव परिणाम देगा। –