1
我試圖重新編寫malloc和free功能,但我得到了與munmap一個問題..如何使用munmap定製的malloc
隨着我的自定義的malloc,我創建的內存使用mmap池(例如:4KB) ,所以當我的malloc被調用時,我可以返回該池的索引作爲地址。
這項工作很好,但是當我使用我的自定義自由(呼叫到munmap),那麼我想分配別的東西與我的自定義的malloc,我有段錯誤,就像如果我的整個池被munmap disallocated ..
例子:
Ask 1024 bytes to my malloc
-> First call so malloc allocate a pool of 4 * pagesize() (So 16 000
bytes)
-> Return to me an addr than I use. (addr[0] = 42)
-> Free with munmap this address (munmap(addr, 1024))
-> re ask to my malloc 1024 bytes
-> Try to fill it with something and segfault.
我真的不明白髮生了什麼。 munmap是否刪除我的所有游泳池?
對不起英語不好。
所以,如果我問兩次1024到我的malloc,然後我想disalloc第一,我不能因爲我的系統上的頁面是4096?我對嗎 ? 但是,在這種情況下,我會泄漏 而在這種情況下,應該得到munmap的第二個參數麼? –
@JeanYim你是對的。第二個參數只有在大於「PAGE_SIZE」時纔有意義 - 您可以一次取消映射多個頁面。你會有碎片,但不超過4K,這並不壞。您將該空閒的1024字節保留在附近,以便下一次過程要求<= 1024。如果用戶最終釋放整個頁面,則可以將其取消映射。 – mtijanic
非常感謝!最後一個問題,所以第二個參數是要取消映射的頁面數量?不是免費的八位組數? (我相信) –