长期运行C ++应用程序中的内存泄漏


甲基蓝
2025-03-02 06:04:36 (7天前)
  1. 我正在运行一个长期运行的C ++应用程序,它分配不同的对象并将其存储在几个dequemap中,并从这些对象中释放这些对象


数据
</跨度>
一次只有结构。我每天都经历了少量的内存增加(通常是1 mb到2 mb)。我已经运行了记忆

泄漏
</跨度>
探测器(valgrind),但我找不到任何可疑的记忆

泄漏
</跨度>

我想知道问题是否

3 条回复
  1. 0# 只怕再见是故人 | 2019-08-31 10-32



    您可能会遇到堆碎片。



    如果分配不同大小的内存块,则可能意味着大内存块最终会被分成更小的块并变得不可用。例如:




    • 你分配一个大块(比如1 MB),运行时从操作系统中获取




    • free

      大块


    • 你分配一个较小的块和

      malloc

      从释放的1 MB块中删除


    • 你尝试再次分配一个1 MB的块,但是

      free

      一个不再足够大,所以运行时从操作系统请求一个新的1 MB块



    如果这种情况持续数天,你可能会得到大量免费的0.99 MB块,但运行时仍然需要在每次需要时从操作系统获得一个新的1 MB块。


  2. 1# ࿏自ོ༾由ོ༽人͙⃡⌇ | 2019-08-31 10-32



    C ++标准不保证删除会释放内存到操作系统。事实上,许多标准C ++库都没有这样做。如果您希望将内存释放到操作系统,则必须使用操作系统自己的内存分配例程。



    标准C ++库提供自定义分配器,可以帮助您执行此操作。


登录 后才能参与评论