Можем ли мы передать объект класса, который имеет динамически управляемые члены через IPC? - PullRequest
0 голосов
/ 10 октября 2018

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

План класса:

class Example
{
  std::string str;
  char *cstring;
  int value;
};

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

Если это были члены статического объекта, то они отображаются в непрерывном распределении памяти, и мы можем скопировать этот объект, верно?Может быть, я ошибаюсь или что-то упустил.

Можем ли мы скопировать весь этот объект и отправить его через IPC, используя какой-либо из механизмов IPC?

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

Спасибо

1 Ответ

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

Как правило, вам нужно сериализовать его в последовательный байтовый буфер, аналогично тому, как вы можете писать или читать, скажем, файл или по сети / Интернету.В этом вам могут помочь различные библиотеки: с двоичными форматами или структурированным текстом, например, JSON или XML.Некоторые могут генерировать шаблонный код для преобразования в структуры и классы и из них.

Если вы используете общую память по одному и тому же виртуальному адресу, вы можете воспользоваться пользовательскими распределителями, чтобы убедиться, что типы STL и другиеВещи хранят все также в общей памяти.Я не уверен, что в стандарте много говорится о том, является ли такое использование разделяемой памяти для стандартных определенных объектов технически совместимым.Я бы ожидал, что string, vector и т. Д. Будут работать, а такие вещи, как mutex, fstream и т. Д. Не будут.

...