如何使用munmap自定义malloc

How to use munmap custom malloc

本文关键字:malloc 自定义 munmap 何使用      更新时间:2023-10-16

我试图重新编码malloc和自由函数,但我得到了一个问题与munmap..

对于我的自定义malloc,我使用mmap(示例:4Kb)创建了一个内存池,因此当调用malloc时,我可以返回这个池的索引作为地址。

这个工作很好,但是当我使用我的自定义free (Call to munmap)然后我想用我的自定义malloc分配其他东西时,我得到了一个段错误,就像我的整个池被munmap取消分配一样。

的例子:

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.
我真的不明白发生了什么事。

您正在取消整个页面的映射。

地址addr必须是页面大小的倍数。所有包含指定范围的页面都将被取消映射,和后续对这些页面的引用将生成SIGSEGV。如果指定的范围不包含任何映射页,则不是错误。

munmap (2)

因此,当您第一次分配munmap时,您取消了整个第一个页面的映射。您应该等到整个页面被释放后才解除映射。或者根本不取消映射—只要确保两个进程不会从同一页获取内存,就不会存在安全漏洞。