1

程序写在C++on上X86_64 Linux 2.6.32.12,有两种情况,一种情况会为每个注入的文件生成一个文件,并通过发送出去UDP(Version A);而另一种情况不会生成文件,直接通过 . 发送注入的文件UDP(Version B)

===============版本A统计图============================ http://i .stack.imgur.com/8bxI5.png http://i.stack.imgur.com/8bxI5.png

================VersionB 静态图=========================== http:// i.stack.imgur.com/wEnKc.png http://i.stack.imgur.com/wEnKc.png

我已经使用valgrind验证了这两种情况,报告相同,没有看到任何内存泄漏。这是由linux内核内存映射引起的吗?测试机有64G内存。这是memory leak吗?

更新信息:

在 中Version A,我们使用UNIX socket将原始文件内容发送到另一个应用程序,然后接收处理结果生成所需的文件。如图所示,物理内存将增加。我试过另一种情况,不通过Unix套接字发送文件,使用system函数,调用另一个应用程序生成需要的文件,显示内存不会增加。似乎新生成的文件不是问题,它是由 Unix 套接字引起的。我们使用套接字池,我使用lsof,没有打开额外的套接字。难道Unix socket会占用内存?

4

2 回答 2

2

我猜想版本 A 正在为文件内容分配内存,并且内存管理器在释放内存时不会将内存返回给系统(因为它正确地知道内存将被重用)。

我不会担心,如果内存有压力,内核会重新使用内存。

于 2012-09-24T08:35:45.343 回答
0

您可能会遇到内存碎片,这会阻止将内存块返回给操作系统。

于 2012-09-24T13:39:48.370 回答