小编Dav*_*ave的帖子

Linux内存映射文件保留了大量物理内存

我有一个问题,在多个线程中描述了内存映射和Linux下不断增长的内存消耗.

当我在Linux或MacOS X下打开1GB文件并使用时将其映射到内存中

me.data_begin = mmap(NULL, capacity(me), prot, MAP_SHARED, me.file.handle, 0);
Run Code Online (Sandbox Code Playgroud)

并且顺序读取映射的内存,我的程序使用了越来越多的物理内存,尽管我使用了posix_madvise(甚至在读取过程中多次调用它):

posix_madvise(me.data_begin, capacity(me), MMAP_SEQUENTIAL);
Run Code Online (Sandbox Code Playgroud)

没有成功.:-(

我试过了:

  • 不同的标志MMAP_RANDOM,MMAP_DONTNEED,MMAP_NORMAL没有成功
  • posix_fadvise(me.file.handle,0,capacity(me),POSIX_FADV_DONTNEED)调用mmap之前和之后 - >没有成功

适用于Mac OS X!当我结合起来

posix_madvise(.. MMAP_SEQUENTIAL)
Run Code Online (Sandbox Code Playgroud)

msync(me.data_begin, capacity(me), MS_INVALIDATE).
Run Code Online (Sandbox Code Playgroud)

常驻内存低于16M(我在16mio步后定期调用msync).

但在Linux没有任何作用.有没有人对我在Linux下的问题有想法或成功的故事?

干杯,大卫

linux macos mmap

5
推荐指数
1
解决办法
2661
查看次数

标签 统计

linux ×1

macos ×1

mmap ×1