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[] 的算法复杂度是多少? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

C++—new/delete/malloc/free详解

C 中的 malloc() 和 free()

malloc/free 和 new/delete

在类中使用 malloc/free

free函数和malloc函数

C++内存管理第一篇:(malloc/deldete和malloc/free)