我读到一些游戏重写了他们自己的malloc以提高效率。我不明白在虚拟内存的世界里这怎么可能。如果我没记错的话,malloc实际上调用了一个特定于操作系统的函数,该函数使用MMU将虚拟地址映射到真实地址。那么,如何在不调用实际运行时的malloc的情况下,创建自己的内存分配器并分配实际内存呢?
谢谢
发布于 2011-01-16 12:30:19
通常,malloc将调用特定于操作系统的函数来获取一堆内存(至少一个VM页面),然后根据需要将内存划分为更小的块,以返回给malloc的调用者。
malloc库还将有一个(或多个)空闲块列表,因此它通常可以满足请求,而无需请求操作系统提供更多内存。确定要处理多少不同的块大小,决定是否尝试组合相邻的空闲块,等等,这些都是malloc库实现者必须做出的选择。
您可以绕过malloc库,直接调用操作系统级别的“给我一些内存”函数,并在从操作系统获得的内存中进行自己的分配/释放。这样的实现可能是特定于操作系统的。另一种选择是使用malloc进行初始分配,但要维护自己的已释放对象缓存。
https://stackoverflow.com/questions/4703775
复制相似问题