c++ 内存池是什么...

阅读 6k
4 个回答

1) 一次性向操作系统申请一大堆内存,然后在这之上构建你的对象,最后用完后再还给操作系统,避免频繁的new delete开销和产生内存碎片。这些都是当你的程序非常需要性能时考虑的。
2) shared_ptr 和 unique_ptr 使用时需要明白资源的所有权的是谁的。譬如处于同样地位两个Node,它们地位是平等的,此时你无法明确到底该由哪个Node来决定资源该什么时候释放,所以shared_ptr 和 unique_ptr 都不贴合应用需求。 从经验的角度来讲,我建议你按照正常指针的方式来实现,最后遍历整个图来释放资源,这样可以把精力放在实现程序逻辑上。

new和delete内存的开销相对大,直接从已经分配好的内存数组中找一块空闲的内存块相对小。所以预先分配一块大内存,分割为小内存块,不用时标记空闲,使用时再获取一下更快速,这就是内存池的雏形。我认为算法简单激进的,确实效果好点,但是算法复杂的池子,还不如操作系统自己的new delete,毕竟操作系统也在不断优化内存分配和释放算法,只不过是选择了最保守策略。

针对你的第二个问题,最简单的方法就是使用vector来作为栈的主体结构。如果需要更精细的实现,那就需要自己写一个空间配置器了(可以参考SGI STL中双层空间配置器的实现)

带池字的就是搞一个集合,在这个集合上利用一定算法,优化性能,,内存池,很多内存,自己管理利用。。线程池,很多线程,管理应用,,用的时候不用在创建浪费时间。及时性比较好

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题