我读过重复调用malloc
/free
可能会很昂贵,因此C++标准库容器使用内存池而不是在它们的析构函数中调用free
。另外,我读过,这意味着C++标准库容器的性能可能比手动分配和释放所有必需的C风格数组要高。为什么C++标准库容器使用内存池,如果显然malloc/free对执行相同的工作?
不过,我很困惑这个,因为现在我在C FAQ正在阅读:(http://c-faq.com/malloc/freetoOS.html)
大部分的malloc实现/免费不释放的内存返回操作系统,但只是在相同的程序中将其用于将来的malloc调用。
这意味着,基本上malloc
/free
功能尝试做同样的工作作为C++标准库中的容器:他们尝试优化重复声称/通过保持存储池中回收内存,然后给节目片这个游泳池的要求。尽管如果执行一次,我可以看到这种优化的好处,但我的直觉告诉我,如果我们同时在几个不同的抽象层上开始这样做,性能可能实际上会下降 - 因为我们将复制相同的工作。
我在这里误解了什么?
您在这里误解的是,除非您的工作涉及编写C++库本身,否则这应该不受任何人的担忧。我永远不会记得,在20多年的黑客C++中,这是我真正关心的事情。 –
@SamVarshavchik这仍然不妨碍我出于普通的好奇心或学习问题而提出有关“为什么以这种方式构建而不是以这种方式构建”的问题。 – gaazkam