c++ - 如何使用munmap自定义malloc

标签 c++ c malloc mmap

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

使用我的自定义 malloc,我使用 mmap 创建了一个内存池(例如:4Kb),因此我可以在调用我的 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 您的第一个分配时,您取消了整个第一页的映射。您应该等到整个页面被释放时才取消映射。或者根本不取消映射 - 只要确保两个进程不会从同一页面获取内存,这样就没有安全漏洞。

关于c++ - 如何使用munmap自定义malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30687238/

相关文章:

c - 使用 free 作为动态数组结构的问题

c++ - 如何将 FTexture2DRHIRef 导出为 png?

c++ - 代码复杂度指标和 ifdef

c++ - Poco 在 SMTPClientSession.login 后停止

c - Doxygen:成员 my_function 的参数未(全部)记录在案

c - 我应该如何用指针算术来解决这个密码?

python - 为什么我的 C 模块会泄漏内存?

c++ - boost 分词器但保留定界符

c - C 中的 malloc 字符串

c++ malloc()不断分配给相同的内存地址