该程序在C++
X86_64 Linux 2.6.32.12
上编写,有两种情况,一种情况会为每个注入的文件生成一个文件,并通过UDP(Version A)
发送出去;另一个案例不会生成文件,直接通过UDP(Version B)
发送注入的文件。
=============== VersionA统计图表=========================== http://i.stack.imgur.com/8bxI5.png
================ VersionB Statictic Graphic =========================== http://i.stack.imgur.com/wEnKc.png
我已经使用valgrind
验证了这两种情况,报告是一样的,没有看到任何内存泄漏。
这是由linux内核内存映射引起的吗?测试机器有64G
个内存。
这是memory leak
吗?
更新信息:
在Version A
中,我们使用UNIX socket
将原始文件内容发送到另一个应用程序,然后接收处理结果生成所需文件。如图所示,物理内存将增加。我试过另一种情况,不要通过Unix套接字发送文件,使用system
函数,调用另一个应用程序生成所需文件,它表明内存不会增加。看来新生成的文件不是问题,它是由Unix套接字引起的。我们使用套接字池,我使用lsof
,没有打开额外的套接字。 Unix socket
会占用记忆吗?
答案 0 :(得分:2)
我猜测版本A正在为文件内容分配内存,并且内存管理器在释放时不会将内存返回给系统(因为它正确地知道内存将被重用)。
我不担心,如果内存有压力,内核会重新使用内存。
答案 1 :(得分:0)
可能是你正在获得内存碎片,这会阻止内存块被返回到操作系统。