我有一个在多个线程中描述的问题,涉及内存映射和 Linux 下不断增长的内存消耗。
当我在 Linux 或 MacOS X 下打开一个 1GB 文件并将其映射到内存中时
me.data_begin = mmap(NULL, capacity(me), prot, MAP_SHARED, me.file.handle, 0);
并顺序读取映射内存,尽管我使用了 posix_madvise (甚至在读取过程中多次调用它),但我的程序使用了越来越多的物理内存:
posix_madvise(me.data_begin, capacity(me), MMAP_SEQUENTIAL);
没有成功。:-(
我试过了:
- 不同的标志 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)
和
msync(me.data_begin, capacity(me), MS_INVALIDATE).
常驻内存低于 16M(我在 16mio 步骤后定期调用 msync)。
但在Linux 下没有任何效果。有人对我在 Linux 下的问题有想法或成功案例吗?
干杯,大卫