Единственное, что вы можете сделать, это прочитать () в кусках, выровненных по размеру страницы. Я предполагаю, что вам нужно гарантировать, что данные записаны, что будет означать обход буферов через posix_fadvise () или использование O_DIRECT (я обычно использую posix_fadvise (), но здесь уместно использовать O_DIRECT).
В этом случае скорость записи носителя в одиночку определяет, как быстро это произойдет.
Если вам не нужно обходить буферы, операция завершится быстрее, но нет никакой гарантии, что данные будут действительно записаны в случае перезагрузки / отключения питания / и т. Д. Так как источник данных находится в разделяемая память, я (опять же) предполагаю, что вы хотите, чтобы запись была гарантирована.
Единственное, что вы можете оптимизировать, - это сколько времени потребуется read (), чтобы получить данные из разделяемой памяти в собственное адресное пространство, что улучшит фрагменты по размеру страницы.