#c #windows #process #shared-memory #memory-mapped-files
#c #Windows #процесс #разделяемая память #файлы, отображенные в памяти
Вопрос:
Я разделяю данные памяти между несколькими процессами в соответствии с дизайном.
В соответствии с дизайном приложению требуется несколько файлов памяти, например, для каждого процесса требуется один файл карты памяти. Но некоторым процессам требуется меньше файла с отображением памяти, например, 10 КБ или меньше. а некоторым процессам требовалось более 1 МБ файла памяти. как только задача обработки завершится, я буду использовать тот же файл с отображением памяти для какого-либо другого процесса.
В этом сценарии, как я могу увеличить размер файла, отображаемого в памяти, на основе запроса процесса. Как только я создаю файл с отображением памяти с помощью CreateFileMapping. как я могу увеличить размер памяти или уменьшить размер.
также у меня есть еще один дополнительный вопрос: как очистить эти данные, не закрывая этот файл, отображенный в памяти. пожалуйста, поделитесь, если кто-нибудь знает.
заранее большое спасибо. хара
Ответ №1:
Вы можете это сделать. См. NtExtendSection.
Комментарии:
1. Он недокументирован и, следовательно, не может быть рекомендован к использованию.
2. @Роман Р.: Хорошая мысль. Также обратите внимание, что это не работает для разделов с поддержкой файлов подкачки.
3. Большое спасибо вам обоим. 🙂
Ответ №2:
Нет — вы не можете увеличить сопоставление после создания (см. http://msdn.microsoft.com/en-us/library/windows/desktop/aa366537(v=vs.85).aspx )!
Размеры, которые вы описываете, не кажутся проблематичными, поэтому я бы просто выбрал один «достаточно большой размер».
Для очистки данных вы можете использовать, например memset ()
, (см. http://msdn.microsoft.com/en-us/library/1fdeehz6.aspx или http://www.cplusplus.com/reference/clibrary/cstring/memset /) или ZeroMemory()
(что является просто сопоставлением макросов Windows API с memset
).
Комментарии:
1. большое спасибо за изучение моей проблемы и общий ответ. как вы сказали, размер на данный момент не является проблемой. но если пользователь хочет запустить 100 процессов, и для каждого процесса требуется около 10 МБ, тогда у меня будут проблемы. именно по этой причине я ищу динамическое решение. спасибо, что предложили zeromemory, я попробую это.