如何使用munmap自定义malloc

How to use munmap custom malloc

我正在尝试重新编码 malloc 和自由函数,但我遇到了 munmap 问题..

使用我的自定义 malloc,我用 mmap 创建了一个内存池(例如:4Kb),所以我可以 return 这个池的索引作为我的 malloc 被调用时的地址。

这工作正常,但是当我使用我的自定义免费(调用 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.

我真的不明白发生了什么。 munmap 会删除我所有的池吗?

抱歉英语不好..

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

The address addr must be a multiple of the page size. All pages containing a part of the indicated range are unmapped, and subsequent references to these pages will generate SIGSEGV. It is not an error if the indicated range does not contain any mapped pages.

munmap(2)

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