使用ION内存技术分配时内存不会释放?

时间:2016-09-26 09:48:58

标签: c linux memory memory-leaks linux-kernel

我的linux应用程序发生了一件奇怪的事情,即在用户空间和内核空间之间使用ION内存进行ipc。

使用ION内存的目的是因为我们的SoC有一个使用ION内存的自定义硬件解码器(在其驱动程序实现下),我正在制作解码器用户空间应用程序。我已经从reference研究了ION内存。

一切都运行良好且完美,但是当我在循环中运行应用程序以使其永远不会退出main()并从头到尾继续运行时,ION内存不会被释放并继续增加,如图所示下面使用pmap。

pmap 1088
1088:   ./vdectest bbb_sunflower_1080p_30fps_normal_10sec.h264 1920 1080 out.yuv
00010000     20K r-x-- vdectest
00024000      4K rw--- vdectest
00025000    132K rw---   [ anon ]
40037000      4K rw---   [ anon ]
4006c000     96K r-x-- ld-2.21.so
40093000      4K r---- ld-2.21.so
40094000      4K rw--- ld-2.21.so
400ba000    100K r-x-- libgcc_s.so.1
400d3000     60K ----- libgcc_s.so.1
400e2000      4K rw--- libgcc_s.so.1
400e3000      4K rw---   [ anon ]
40123000      8K rw---   [ anon ]
401cb000      4K rw---   [ anon ]
40241000     64K r-x-- libpthread-2.21.so
40251000      4K r---- libpthread-2.21.so
40252000      4K rw--- libpthread-2.21.so
40253000      8K rw---   [ anon ]
4032f000      4K rw---   [ anon ]
403c4000    868K r-x-- libc-2.21.so
4049d000     60K ----- libc-2.21.so
404ac000      8K r---- libc-2.21.so
404ae000      4K rw--- libc-2.21.so
404af000     12K rw---   [ anon ]
404bd000      4K rw---   [ anon ]
404be000      4K -----   [ anon ]
404bf000   8188K rw---   [ anon ]
40d1e000      4K -----   [ anon ]
40d1f000   8188K rw---   [ anon ]
4151e000   2048K rw-s-   [ anon ]
417c0000   2048K rw-s-   [ anon ]
41a9c000   2048K rw-s-   [ anon ]
41d00000    132K rw---   [ anon ]
41d21000    892K -----   [ anon ]
41e00000      4K -----   [ anon ]
41e01000   8188K rw---   [ anon ]
42600000   3064K rw-s-   [ anon ]
4297c000   3064K rw-s-   [ anon ]
42cb8000   3064K rw-s-   [ anon ]
43036000   3064K rw-s-   [ anon ]
43386000   3064K rw-s-   [ anon ]
43742000   3064K rw-s-   [ anon ]
43b08000   3064K rw-s-   [ anon ]
43e48000   3064K rw-s-   [ anon ]
44226000   3064K rw-s-   [ anon ]
44557000   3064K rw-s-   [ anon ]
4494b000   3064K rw-s-   [ anon ]
44d1f000   3064K rw-s-   [ anon ]
45038000   3064K rw-s-   [ anon ]
4539d000   3064K rw-s-   [ anon ]
4576b000   3064K rw-s-   [ anon ]
45a84000   3064K rw-s-   [ anon ]
45f00000    132K rw---   [ anon ]
45f21000    892K -----   [ anon ]
46000000   8704K rw-s-   [ anon ]
be848000    132K rw---   [ stack ]
ffff0000      4K r-x--   [ anon ]
 total    92116K


pmap 1088
1088:   ./vdectest bbb_sunflower_1080p_30fps_normal_10sec.h264 1920 1080 out.yuv
00010000     20K r-x-- vdectest
00024000      4K rw--- vdectest
00025000    132K rw---   [ anon ]
40003000      4K rw---   [ anon ]
4006c000     96K r-x-- ld-2.21.so
40087000      4K rw---   [ anon ]
40093000      4K r---- ld-2.21.so
40094000      4K rw--- ld-2.21.so
400ba000    100K r-x-- libgcc_s.so.1
400d3000     60K ----- libgcc_s.so.1
400e2000      4K rw--- libgcc_s.so.1
40123000      8K rw---   [ anon ]
401cb000      4K rw---   [ anon ]
40241000     64K r-x-- libpthread-2.21.so
40251000      4K r---- libpthread-2.21.so
40252000      4K rw--- libpthread-2.21.so
40253000      8K rw---   [ anon ]
4032f000      4K rw---   [ anon ]
403c4000    868K r-x-- libc-2.21.so
4049d000     60K ----- libc-2.21.so
404ac000      8K r---- libc-2.21.so
404ae000      4K rw--- libc-2.21.so
404af000     12K rw---   [ anon ]
404bd000      4K rw---   [ anon ]
404be000      4K -----   [ anon ]
404bf000   8188K rw---   [ anon ]
40d1e000      4K -----   [ anon ]
40d1f000   8188K rw---   [ anon ]
4151e000   2048K rw-s-   [ anon ]
4178f000   2048K rw-s-   [ anon ]
41a29000   2048K rw-s-   [ anon ]
41d00000    132K rw---   [ anon ]
41d21000    892K -----   [ anon ]
41e00000      4K -----   [ anon ]
41e01000   8188K rw---   [ anon ]
42600000      4K -----   [ anon ]
42601000   8188K rw---   [ anon ]
42e00000   3064K rw-s-   [ anon ]
43198000   3064K rw-s-   [ anon ]
434b5000   3064K rw-s-   [ anon ]
43805000   3064K rw-s-   [ anon ]
43bf9000   3064K rw-s-   [ anon ]
43f9f000   3064K rw-s-   [ anon ]
442ea000   3064K rw-s-   [ anon ]
44659000   3064K rw-s-   [ anon ]
4496d000   3064K rw-s-   [ anon ]
44d00000   3064K rw-s-   [ anon ]
450e6000   3064K rw-s-   [ anon ]
45459000   3064K rw-s-   [ anon ]
45789000   3064K rw-s-   [ anon ]
45b73000   3064K rw-s-   [ anon ]
45f00000    132K rw---   [ anon ]
45f21000    892K -----   [ anon ]
46000000   3064K rw-s-   [ anon ]
4633b000   3064K rw-s-   [ anon ]
46660000   8704K rw-s-   [ anon ]
be848000    132K rw---   [ stack ]
ffff0000      4K r-x--   [ anon ]
 total   100308K

可以看到进程使用的总内存" vdectest"使用pmap将上述 92116K 增加到 100308K 。此虚拟内存大小一直在增长,直到达到实际的物理内存大小,然后进程将退出并显示错误ENOMEM" 无法分配内存"。

0 个答案:

没有答案