Межпроцессное взаимодействие, куча памяти - PullRequest
0 голосов
/ 07 октября 2018

Можно ли разделить кучи памяти между двумя разными процессами?В документации по межпроцессному ускорению есть утверждение, что управляемая куча памяти не создает общесистемные ресурсы

1 Ответ

0 голосов
/ 07 октября 2018

Ничего не предусмотрено в стандарте C ++ для совместной памяти между процессами.Фактически, каждый процесс выполняется в своем собственном адресном пространстве и управляет своей динамической памятью в этом адресном пространстве, поэтому нет возможности разделить «кучу».

Однако операционные системы предоставляют некоторые средства для совместного использования памяти между процессами.Наиболее известным способом является использование отображенных в память файлов , которые поддерживаются в широком диапазоне ОС, но специфическим для ОС образом, поэтому не переносимы. boost предлагает переносимую реализацию, которая скрывает специфическую часть ОС.

Вы можете очень хорошо использовать область памяти, полученную таким образом для ваших объектов.Вы можете использовать размещение новых для создания объектов.Вы даже можете создать собственный распределитель для создания динамических объектов в этой области памяти.

Однако это требует особой осторожности, так как вы должны принять во внимание синхронизацию IPC, чтобы избежать гонок, и вы должны помнить, что любой указатель, созданный одним процессом, является мусором для другого процесса (так как он работает в другом режиме)., независимое адресное пространство).

...