cari

Rumah  >  Soal Jawab  >  teks badan

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

今天在知乎上问题问了一个问题, 轮子哥的回答里面提到的内存池的概念, 但是我其实不太清楚内存池到底是什么? 顺便求知乎提问中问题的解答...
链接如下 : 用c++写正则引擎构造nfa的时候到底该用智能指针吗?

天蓬老师天蓬老师2767 hari yang lalu585

membalas semua(4)saya akan balas

  • 伊谢尔伦

    伊谢尔伦2017-04-17 14:29:19

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

    balas
    0
  • 天蓬老师

    天蓬老师2017-04-17 14:29:19

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

    balas
    0
  • ringa_lee

    ringa_lee2017-04-17 14:29:19

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

    balas
    0
  • 黄舟

    黄舟2017-04-17 14:29:19

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

    balas
    0
  • Batalbalas