gpt4 book ai didi

c++ - mmap小尺寸内存,当munmap时,glibc会释放映射内存给操作系统吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:58:21 24 4
gpt4 key购买 nike

在多线程服务器程序中,发现常驻内存从1G增加到20G,并没有下降。我用内存工具检查过,程序没有内存泄漏。所以我想也许 glibc 持有释放的内存,没有释放给操作系统。我用mmap替换了alloc(一般情况下,每个mmap都会申请65-100k内存),期望调用munmap时,映射的内存会归还给OS,但是我观察程序运行1天后仍然占用20G内存?所以我想知道:munmap 一定会将映射内存返回给操作系统吗?和其他建议?谢谢。

最佳答案

是的,对于小分配(< 128k,我记得)glibc 通常会使用 sbrk 并维护自己的空闲列表。对于较大的分配,它将使用 mmap()munmap()

munmap 肯定会将内存归还给系统。这是一个系统调用; glibc 只是将它传递给内核。

假设这是 Linux,您可以通过编写一些测试代码并执行 cat/proc/PID/maps 来验证 mmap 的行为,其中 PID 是进程 ID你的过程。它将为内核为您的进程维护的每个虚拟内存区域 (VMA) 打印一行;本质上,每个 mmap() 一个。

然而,即使 glibc 不将内存归还给系统,它也会通过自己的内部空闲列表回收它。鉴于此,再加上使用 mmap()/munmap() 并没有改变任何东西,您是否认为您的程序可能存在内存泄漏?

关于c++ - mmap小尺寸内存,当munmap时,glibc会释放映射内存给操作系统吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6394080/

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