2012-08-22 3 views
11

मैं सोच रहा था, मैप किए गए मेमोरी का आकार एक पैरामीटर क्यों पारित किया जाना चाहिए, क्योंकि एक ही पते से शुरू होने वाले एक से अधिक मैपिंग नहीं हो सकते हैं (क्या वे?), लिनक्स कर्नेल दोनों प्रारंभिक पते को रिकॉर्ड क्यों नहीं करेगा, लंबाई एक साथ, लेकिन उपयोगकर्ताओं को प्रोग्राम याद रखने दें।मुनैप को पैरामीटर के रूप में लंबाई की आवश्यकता क्यों है?

मेरा मतलब है, ऐसा क्यों नहीं होगा, केवल जानकारी के पेड़ को स्टोर करने के लिए प्राथमिक कुंजी के रूप में प्रारंभ पता का उपयोग करें।

उत्तर

9

एक map कह सकता है, 5 पेज और बाद में unmap उनमें से एक। और पृष्ठों को अनैप करने के बारे में जानकारी पता और लंबाई के रूप में पारित की जाती है जहां लंबाई पृष्ठ आकार का एक बहु है।

6

आप munmap मेमोरी पतों का एक सब्रेंज कर सकते हैं जिसे आपने पहले मैप किया था। उदाहरण के लिए:

#include <stdio.h> 
#include <sys/mman.h> 
#include <unistd.h> 

int main() 
{ 
    int pagesize = sysconf(_SC_PAGESIZE); 
    char *addr = mmap(NULL, 4 * pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); 
    addr[pagesize] = 'X'; 
    munmap(addr, pagesize); 

    printf("%c\n", addr[pagesize]); 
} 
संबंधित मुद्दे