看到CSDN上有人提问,我就把自己的想法写下了。
对于大项目,(尤其是频繁内存操作的高性能项目),系统的内存管理功能不那么好使的。当然,对于一些自带内存管理功能的语言来说,在一定程度上,另当别论。
对于你所说的情况,建议在系统启动时候,分配足够多的内存,然后自己管理。最简单的情况,当然是假设你的链表中,每个节点,内存大小需求一致了。
对于这种理想情况,我给出一种方法:
写一个内存管理类,
类中有几个关键变量:start(内存起始),end(内存结束),这两个变量在系统初始化时候向OS申请的大内存决定。那么既然每个节点大小一样,就可以把这段内存想象成N个节点的一个连续表。这个表中有两类块,一类是已经被用得,另一类是当前可用的。
此外,你得迅速找到当前可用的块的位置。
我有一种像法师这样的:在这个类里有两个链表,一个当前可用链表,里面有当前可用的所有节点,一个当前正在使用链表,里面挂着所有当前已经被使用的节点。在初始化时候,当前可用节点,里面顺序存着从start到end的每一个块。
分配算法,从当前可用链表中摘一个节点,挂入当前正在使用链表。然后你程序获得这个节点之后,就获得了,对应地址的内存指针。
释放算法,清零该节点内存,然后将其挂入当前可用链表里。
分配复杂度O(1)。对于释放,性能也可以提高。可以在类分配节点中给出信息节点首地址。那么当你需要释放的时候,你就立刻可以知道,当前你要摘除的节点的位置。
详细的随后我做实验再说啦。现在先这样。