Можно ли заменить сериализацию простым static_cast для извлечения данных, совместно используемых двумя процессами в C ++? - PullRequest
0 голосов
/ 26 июня 2018

Допустим, у меня есть процесс, написанный на C ++, который имеет много экземпляров класса A.

class A {
   std::vector<std::vector<short>> tab;
   /* other random data */
}

После создания эти объекты должны быть доступны (только для чтения) другим процессам другого приложения, в том числе в C ++.

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

«Простое» портативное решение состояло бы в том, чтобы сериализовать объекты в разделяемой памяти, а затем, когда запрашивали данные, процесс просто определял местоположение различных экземпляров класса А в памяти, а второй процесс десериализовывал их, прежде чем они смогут прочитать данные. Это означает, что мы будем создавать копию каждый раз, когда процесс хочет прочитать данные. Это то, чего я хотел бы избежать.

Учитывая, что оба процесса написаны на C ++ и оба знают определение класса A, возможно ли избежать сериализации и, следовательно, копирования / смещения данных? Конечно, он больше не будет переносимым, но это не обязательно.

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

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

...