如何使用munmap自定义malloc
How to use munmap custom malloc
我试图重新编码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
时,您取消了整个第一个页面的映射。您应该等到整个页面被释放后才解除映射。或者根本不取消映射—只要确保两个进程不会从同一页获取内存,就不会存在安全漏洞。
相关文章:
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- C++自定义比较函数
- 如何比较自定义类的std::变体
- std::设置自定义比较器
- 如何正确实现和访问运算符的各种自定义枚举器
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 自定义先决条件对移动分配运算符有效吗
- 使用VS Code和CMake Tools运行自定义命令
- 如何创建从Maya(或类似程序)到虚幻引擎的自定义数据导出插件
- std::ranges::elements_view,用于自定义类似元组的数据
- 跟随整数索引列表的自定义类迭代器
- 参数化自定义CMake工具链
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 如何将自定义的malloc添加到Linux中
- C++中 malloc 的自定义实现
- 自定义malloc实现
- 实现自定义malloc(),可以在c++中跟踪分配位置
- shared_ptr没有在线程中发布自定义malloc
- 如何使用munmap自定义malloc