gpt4 book ai didi

c++ - 为什么 C++ 标准库容器使用内存池,如果显然 malloc/free 对做同样的工作?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:07:53 29 4
gpt4 key购买 nike

我读到过重复调用 malloc/free 可能代价高昂,因此 C++ 标准库容器使用内存池而不是调用 free 在他们的析构函数中。另外,我读到过,这意味着 C++ 标准库容器的性能可以高于手动分配和取消分配所有必要的 C 样式数组。

但是,我对此感到困惑,因为现在我正在阅读 C 常见问题解答:( http://c-faq.com/malloc/freetoOS.html )

Most implementations of malloc/free do not return freed memory to the operating system, but merely make it available for future malloc calls within the same program.

这意味着本质上 malloc/free 函数尝试做与 C++ 标准库容器完全相同的工作:它们尝试通过优化重复声明/回收内存将内存保存在一个池中,然后根据要求提供该池的程序片段。虽然我可以看到这种优化执行一次的好处,但我的直觉告诉我,如果我们同时在几个不同的抽象层上开始这样做,性能实际上可能会下降——因为我们将重复相同的工作。

我在这里误解了什么?

最佳答案

标准库的一些实现使用内存池。

一般来说,当您知道特定容器的内存需求时,您可能能够比不知道容器特定需求的通用内存管理器更好地管理其内存。

例如,如果您使用 std::list<int>列表中的每个节点都是相同的大小,并且让容器维护一个未使用节点的列表(只需两个指针分配来向空闲列表添加节点或从空闲列表中删除节点)可能比将未使用的节点释放回更通用的节点更快但 new/delete (malloc/free) 使用的更复杂的通用内存管理器。

关于c++ - 为什么 C++ 标准库容器使用内存池,如果显然 malloc/free 对做同样的工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46736020/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com