Вы не сможете передать указатель на границы приложений, поскольку процессы будут иметь разные адресные пространства. Если вам нужно обратиться к этому объекту и инициировать операции против него, вам нужно будет использовать распределенную систему объектов или другой уровень взаимодействия между процессами.
Создается впечатление, что вы хотите создать дочерний процесс, обновить некоторую общую структуру данных и затем выйти. Одной из возможностей было бы использовать общую систему памяти, такую как mmap (2) или System V shared memory. К сожалению, переносимая разделяемая память немного сложнее достичь в Windows и Unix/Linux, и вам, вероятно, придется создавать некоторые платформы для конкретной платформы. This MSDN article должен дать вам стартер на mmap-подобном объекте в Windows, но я никогда не делал разделяемой памяти на этой платформе, поэтому я не могу не ручаться за любые из них.
Другая возможность - это сериализовать объект и передать сериализованную структуру данных между процессами с помощью трубы или другого механизма. Опять же, делать это переносимо несколько чревато, так как IPC в Unix и Windows работает совсем по-другому.
Обратите внимание, что в общей памяти объект должен быть инициализирован в пуле разделяемой памяти, что означает, что это нужно будет назначить первым. В противном случае вам нужно будет скопировать данные в и из открытого пула явно. Если в структуре данных есть какие-то указатели, то это движение нарушит указатели.
Последний пункт также означает, что родительский дочерний процесс ahd также должен будет сопоставить разделяемую память в один и тот же виртуальный адрес, если вы намерены следовать указателям в общей структуре данных. Альтернативой, если вам нужны ссылки в структуре данных, является реализация их как ручек или смещений от базы. Это усложнит код, который создает вашу структуру данных, поэтому сопоставление с тем же адресом, чтобы вы могли использовать указатели, - это победа.
Также позаботьтесь о безопасности файлов, используемых для mmap, если вы решите использовать это.
Не могли бы вы привести пример использования общей памяти на Max OS X? –
В любой системе, полученной из unix, найдите mmap (2), который позволяет отображать файл в виртуальную память. Это будет работать на OSX, Unix, Linux и т. Д., Но оно не переносится в Windows. Вам придется писать обертки, чтобы сделать это в Unix/Windows. Сначала возьмите mmap, работая на OSX, и посмотрите, делает ли он то, что вы хотите. Другим API, который будет делать это, является общая память System V. Попробуйте googling для «System V shared memory». Я предполагаю, что OSX поддерживает SYSV shmem, но я не уверен в своей голове. – ConcernedOfTunbridgeWells