Я не уверен на 100%, чего вы хотите достичь, но я предполагаю, что вы хотите оптимизировать распределение, чтобы получить меньше накладных расходов, если один и тот же регион используется несколько раз в одном приложении.
Ядро должно отслеживать каждую ссылку на страницу физической памяти, поэтому, если вы «отслеживаете выделение и возвращаете один и тот же указатель» в свой код, вам нужно будет ссылаться на подсчет ассигнований самостоятельно и выполнять только распределение/когда это необходимо.
Я хотел бы выполнить, что на уровне пользовательского режима, в основном сохраняя std::map
(или аналогичный), который вводится в основной памяти и размера, а затем подсчет ссылок, что распределение, и вызывать только munmap
, когда счетчик ссылок достигает нуля (и, конечно, только позвонить mmap
, когда регион не найден). Это становится более «забавным», если у вас есть несколько распределений разных размеров для одного и того же региона, но я не думаю, что есть способ, который работает (хорошо), который может быть реализован для этого - по крайней мере, нет, если второй вызов требует более крупное распределение.
Преимущество этого в пользовательском режиме ясно: если вы когда-либо ошиблись в бухгалтерском учете, ядро все равно освободит память, если приложение остановится. И распределение памяти для std::map
[или его эквивалента] в режиме ядра также будет намного сложнее иметь дело.
«Это хорошая идея с точки зрения производительности?» Почему бы не измерить это? –
измерение против чего? У меня пока нет альтернативных методов :) – user1876942
mmapping он дважды против mmapping его один раз и повторное использование mmap. –