动态分配的内存来自堆栈或堆。我听说有人说堆是一个链表,尽管如果是这种情况,它似乎效率极低。例如,如果您想分配一个较大的内存块,则似乎必须先浏览大部分列表,然后才能找到具有可用空间的东西。而且,随着时间的流逝,具有少量可用内存的块数量可能会越来越大。结果,某些算法所要求的big-O表示法运行时可能不正确,因为它们通常依赖于恒定的时间分配。任何人都可以澄清它们的实施方式和效率吗?
答案 0 :(得分:1)
以不同方式管理堆。您可以在Internet上找到数百种不同的malloc实现。然后,您可以选择在应用程序中获得最佳性能的一种。
做堆的一种方法是只分配固定大小的块。例如,您的堆管理器将维护16、32、64,......字节的块列表。堆管理器只会拉出下一个大于请求大小的可用块。