Использование памяти при использовании boost :: iostreams :: mapped_file

Я вставляю некоторый код, который использует boost iostream для mmap, а затем записывает в сопоставленный файл:

typedef unordered_map<int, string> work;

    int main()
    {

            work d;
            d[0] = "a";

            boost::iostreams::mapped_file_params  params;
            params.path = "map.dat";
            params.new_file_size = 1000000000;
            params.mode = (std::ios_base::out | std::ios_base::in);
            boost::iostreams::mapped_file  mf;
            mf.open(params);
            work* w = static_cast<work*>((void*)mf.data());
            w[0] = d;
            for(int i=1; i <1000000000 ;++i)
            {
                    w->insert(std::make_pair(i, "abcdef"));
            }
            mf.close();

    }

Когда я выполнил это на моем Centos 6 Box с 8 процессорами и 16 ГБ оперативной памяти, я заметил следующее:

Когда данные вставлялись в файл отображения памяти, RES (из верхней команды) непрерывно увеличивался и достигал 14 ГБ. У меня сложилось впечатление, что когда я mmap файл VIRT увеличится, а не RES. Так что, когда мы записываем в файл mmap, сначала он записывается в память, а затем записывается на диск? Или какой-нибудь промежуточный буфер / кеш используется?

С помощью команды «free» я также заметил, что после того, как использование памяти достигает 16 ГБ, используются буферы. Вот несколько снимков свободной команды в разное время, когда выполнялся приведенный выше код:

            total       used       free     shared    buffers     cached
Mem:      16334688   10530380    5804308          0     232576    9205532
-/+ buffers/cache:    1092272   15242416
Swap:     18579448     348020   18231428

            total       used       free     shared    buffers     cached
Mem:      16334688   13594208    2740480          0     232608    9205800
-/+ buffers/cache:    4155800   12178888
Swap:     18579448     348020   18231428

            total       used       free     shared    buffers     cached
Mem:      16334688   15385944     948744          0     232648    9205808
-/+ buffers/cache:    5947488   10387200
Swap:     18579448     348020   18231428

            total       used       free     shared    buffers     cached
Mem:      16334688   16160368     174320          0     204940    4049224
-/+ buffers/cache:   11906204    4428484
Swap:     18579448     338092   18241356

            total       used       free     shared    buffers     cached
Mem:      16334688   16155160     179528          0     141584    2397820
-/+ buffers/cache:   13615756    2718932
Swap:     18579448     338092   18241356

            total       used       free     shared    buffers     cached
Mem:      16334688   16195960     138728          0       5440      17556
-/+ buffers/cache:   16172964     161724
Swap:     18579448     572052   18007396

Что означает это поведение?

Запись данных в отображенный в память файл заняла много времени по сравнению с записью в память. Что является причиной этого?

Я хотел использовать отображение памяти, чтобы снизить использование RES, поскольку я имею дело с огромными данными. Но, похоже, это не так. Хотелось сохранить все данные в отображенных в память файлах и при необходимости прочитать их обратно.

Я неправильно использую отображение памяти? Или так себя ведет?

Ответы на вопрос(1)

Ваш ответ на вопрос