gpt4 book ai didi

c++ - 为什么我的 C++ 程序在执行 tcmalloc heap-checker 或 heap-profile 时使用大量内存

转载 作者:太空宇宙 更新时间:2023-11-04 12:59:26 33 4
gpt4 key购买 nike

CentOS Linux 发行版 7.3.1611

gcc 版本 4.8.5 20150623

gperftool 2.4-8.el7

1.my c++ 程序链接 -ltcmalloc 在没有 HEAPCHECKER 或 HEAPPROFILE 的情况下工作正常。它使用的内存稳定在5M~10M。

2.如果我使用带有 env HEAPCHECKER=NORMAL 的堆检查器运行程序,内存会每小时增加大约 50M,直到 OOM 终止。

3.如果我使用带有env HEAPPROFILE="./hp"HEAP_PROFILE_ALLOCATION_INTERVAL=100000000的堆配置文件,内存每40分钟增加大约100M并且还会触发OOM。但是,当我使用pprof 分析堆文件,它显示总内存只有 0.1MB,而我预计为 100M。

我知道 heap-checker 和 heap-profile 会导致额外的内存使用,因为它们需要记录一些其他信息来跟踪内存分配,但我不认为这是我的情况的原因。

我在另一个小程序中使用了 heap-checker 和 heap-profile,效果很好。

这两个程序最大的区别是,错误程序使用协程,我指的是函数swapcontext、getcontext和makecontext。

我的问题是:

Q1.为什么设置HEAP_PROFILE_ALLOCATION_INTERVAL=100000000时pprof打开的堆文件显示总内存为0.1M?

Q2.会不会是heap-checker或者heap-profile跟那些协程函数配合不好?

最佳答案

我假设您使用的是堆栈协程,因此您一直在创建新的堆栈。很可能是当您运行跳棋时,堆栈不再完全销毁/释放,因此它们实际上发生了泄漏。

关于c++ - 为什么我的 C++ 程序在执行 tcmalloc heap-checker 或 heap-profile 时使用大量内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44920372/

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