我读了一些游戏重写自己的malloc来更有效率.我不明白这在虚拟内存世界中是如何可能的.如果我记得正确,malloc实际上会调用一个特定于操作系统的功能,它将虚拟地址映射到MMU的真实地址.那么那么有人可以自己创建内存分配器并分配真正的内存,而不需要调用实际的运行时的malloc?
谢谢
解决方法
写一个分配器当然可以比一般目的更有效率.
如果您知道配置的属性,则可以将通用分配器从水中排除.
例如:多年以前,我们必须为嵌入式系统设计和编写通信子系统(HDLC,X.25和专有层).我们知道最大分配的事实总是小于128字节(或类似的),这意味着我们根本不用混乱可变大小的块.每个分配是128字节,无论你要求多少.
当然,如果你要求更多,它返回NULL.
通过使用固定长度的块,我们能够极大地加快分配和分配,使用位图和相关联的结构来保存会计信息,而不是依赖于较慢的链表.此外,不需要合并自由区块.
当然,这是一个特殊情况,但是你会发现这样的游戏也是如此.实际上,我们甚至在一个通用系统中使用这个系统,其中低于某个阈值的分配从一个自我管理的预先分配的池中获得了固定的内存量.任何其他分配(大于阈值或池完全分配)被发送到“真实”malloc.