Vous ne pourrez pas passer un pointeur entre les limites d'une application car les processus auront des espaces d'adressage différents. Si vous devez vous référer à cet objet et initier des opérations contre celui-ci, vous devrez utiliser un système objet distribué ou une autre couche de communication interprocessus. L'impression que j'obtiens est que vous voulez engendrer le processus fils, lui faire mettre à jour une structure de données partagée et ensuite quitter. Une possibilité serait d'utiliser un système de mémoire partagée tel que mmap (2) ou System V shared memory. Malheureusement, la mémoire partagée portable est un peu plus difficile à atteindre sur Windows et Unix/Linux, et vous devrez probablement créer des wrappers spécifiques à la plate-forme. This MSDN article devrait vous donner un démarreur sur une installation de type mmap sur Windows, mais je n'ai jamais fait de mémoire partagée sur cette plate-forme, donc je ne peux pas vraiment me porter garant pour les tenants et les aboutissants.
Une autre possibilité consisterait à sérialiser l'objet et à passer la structure de données sérialisée entre les processus avec un canal ou un autre mécanisme. Encore une fois, le faire de manière portable est un peu compliqué car IPC sous Unix et Windows fonctionne de manière très différente.
Notez qu'avec la mémoire partagée, l'objet devra être initialisé dans le pool de mémoire partagée, ce qui signifie qu'il devra d'abord être alloué. Sinon, vous devrez copier les données dans et hors du pool partagé explicitement. Si la structure de données contient des pointeurs, alors ce mouvement casse les pointeurs. Ce dernier point signifie également que le processus fils parent ahd devra également mapper la mémoire partagée dans la même adresse virtuelle si vous avez l'intention de suivre des pointeurs dans la structure de données partagée. L'alternative si vous avez besoin de références dans la structure de données est de les implémenter comme des poignées ou des offsets d'une base. Cela compliquera le code qui construit votre structure de données afin de mapper à la même adresse afin que vous puissiez utiliser les pointeurs est une victoire.
Également swot sur la sécurité des fichiers utilisés pour mmap si vous décidez de l'utiliser.
Pourriez-vous donner un exemple d'utilisation de la mémoire partagée sur Max OS X? –
Sur n'importe quel système dérivé d'unix, recherchez mmap (2) qui vous permet de mapper un fichier dans la mémoire virtuelle. Cela fonctionnera sur OSX, Unix, Linux, etc. mais ce n'est pas portable pour Windows. Vous devriez écrire des wrappers pour le faire sous Unix/Windows. Faites d'abord appel à mmap sur OSX et voyez s'il fait ce que vous voulez. Une autre API qui fera cela est la mémoire partagée System V. Essayez googling pour "mémoire partagée du système V". Je suppose que OSX supporte SYSV shmem mais je ne suis pas sûr de la tête. – ConcernedOfTunbridgeWells