У меня есть проблема, которая была описана в нескольких потоках, касающихся отображения памяти и растущего потребления памяти под Linux.
Когда я открываю файл размером 1 ГБ в Linux или MacOS X и отображаю его в памяти с помощью
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);
безуспешно. : - (
Я пробовал:
Он работает под Mac OS X !!! когда я комбинирую
posix_madvise(.. MMAP_SEQUENTIAL)
и
msync(me.data_begin, capacity(me), MS_INVALIDATE).
Резидентная память меньше 16M (я периодически вызывал msync после 16 миллионов шагов).
Но под Linux ничего не работает . У кого-нибудь есть идея или история успеха решения моей проблемы в Linux?
Ура, Дэвид