与malloc共享虚拟地址空间

时间:2014-06-13 04:12:58

标签: android ios linux windows macos

我正在编写一个自定义内存分配例程,旨在替换malloc(),或者与malloc()一起安静地生活,并在不同情况下调用不同的内存分配器。

现在,不同的内存分配例程对虚拟地址空间提出了不同的要求。使用免费列表,您基本上可以继续向操作系统询问mmap()的更多内存页面,一次一个内存页面。您可以随意将数据放入这些页面,即使这些页面遍布整个虚拟地址空间,因为您可以将页面与指针元数据链接在一起。另一方面,像伙伴分配器这样的东西不能随意添加页面。好友分配器需要有大块的虚拟内存空间,没有漏洞。

所以,我的问题是:malloc()如何利用虚拟内存空间?不同的实现可能有所不同,但我对任何常见的上下文中的答案感兴趣:OS X,Windows,Linux,各种BSD,iOS和Android。

如果我在32位计算机上运行,​​并且我要求mmap()为自定义伙伴分配器之类的3gig连续内存空间,那么malloc()可能会感到不安吗? malloc()做类似的事情吗?一般来说,如何使一个人自己的mmap()代码在虚拟地址空间中表现为一个好公民?或者只是那里狂野的西部?

0 个答案:

没有答案