我有一个问题,在多个线程中描述了内存映射和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)
没有成功.:-(
我试过了:
它适用于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下的问题有想法或成功的故事?
干杯,大卫