- 地点
- 在堆中,碎片化(每个节点的 malloc) - 在几种不同的方面效率低下(缓慢分配,缓慢访问,内存碎片)
- 在堆中,在一大块中 - 当需要重新分配时,数据结构获得的所有灵活性都会丢失
- 在堆栈中 - 堆栈的大小往往相当有限,因此根本不建议在其上分配大型结构
它们的最大优势,插入 O(1),在碎片化内存和数千次调用内存分配器以给我们另外 10 个字节的环境中似乎相当无用。
编辑澄清:
这个问题是在一次采访中被问到的。这不是一个工作场所问题,因此希望从一小组标准算法中盲目地做出正确决定的通常启发式方法是不适用的。
现有的答案和评论提到“malloc 并没有那么慢”,“malloc 部分对抗碎片”。好的,如果我们使用另一种数据结构,例如 C++ 向量的 C 端口(即 - 分配足够大小的顺序内存,如果数据扩展,则重新分配到两倍大的块)所有问题都解决了,但我们失去了快速插入/删除。链表(分配在哪里?)比向量具有巨大优势的任何场景?