malloc()/free()/new/delete/delete[] 的算法复杂度是多少? [复制]
Posted
技术标签:
【中文标题】malloc()/free()/new/delete/delete[] 的算法复杂度是多少? [复制]【英文标题】:What is the algorithmic complexity of malloc()/free()/new/delete/delete[]? [duplicate] 【发布时间】:2015-03-13 22:16:57 【问题描述】:我怀疑 delete[] 是 O(n) 而其他是 O(1),但我想确定一下。再说一次,分配可变内存量的固定时间似乎并不正确。
【问题讨论】:
分配的复杂度与 O(n) 相关,因为必须映射到虚拟地址的物理页数取决于分配大小。还有一个分配的内存头的链表,可能还有一个释放的内存头的链表。对于 X86,页面大小为 4K,但我不确定最小分配是多少。释放内存并不总是取消映射和释放虚拟页面,并且可能只是将标头节点从分配的列表移动到已释放的列表。当一个进程结束时,该进程的虚拟寻址被关闭,所有物理页面都被释放。 @rcgldr - 在某些操作系统上,不会立即分配物理页面。 【参考方案1】:没有。这些功能都不是算法。您不能保证它们会产生任何特定的复杂性。它们具有实现所使用的任何底层算法的复杂性。
【讨论】:
对于这些特定函数是正确的,但同样重要的是要注意,对于标准库中的许多函数,都需要特定的复杂性(即使没有指定算法,其中一个具有这种复杂性——或者更好——需要在实现中使用)。以上是关于malloc()/free()/new/delete/delete[] 的算法复杂度是多少? [复制]的主要内容,如果未能解决你的问题,请参考以下文章