Accueil > Forum > > > > Mémoire partagée et pointeur
Mémoire partagée et pointeur
mercredi 9 juillet 2003 à 11:37:49 |
Mémoire partagée et pointeur

darsh99
|
Bonjour, J'essai de faire passer un tableau dynamique, un pointeur donc, d'un programme à un autre, l'adresse est bien passée et les champs non dynamique de la struct aussi (int et compagnie), mais le programme qui la reçoit n'arrive pas à accéder aux éléments du tableau. J'ai tout de suite pensé que l'adresse du tableau dynamique était relative à la zone mémoire du programme qui avait créé le tableau (j'ai testé avec un "new" mais aussi avec un "int tabX[2]; tab = tabX;" mais c'est pareil évidemment) et que c'est pour ça que le second ne trouvait rien à l'adresse indiqué, y'a-t-il un moyen de faire pointer le second où il faut ? (par exemple en récupérant l'adresse de début de la zone mémoire du 1er programme et en l'ajoutant à l'adresse du tableau) Je ne suis pas sûr de m'être bien expliqué. Si ce n'est pas possible ça va m'obliger à placer des tableaux de grosse taille dans la struct, ça m'embêterait beaucoup :(
|
|
mercredi 9 juillet 2003 à 11:57:38 |
Re : Mémoire partagée et pointeur

Kaid
|
Si tu es sous Win32, utilise le File Mapping. Cela te permettra d'avoir une zone mémoire allouée par le système et nommée, c'est-à-dire que tu pourrais y accéder à partir de n programmes. Kaid - kaid.fr.st------------------------------- Réponse au message : ------------------------------- > Bonjour, > > J'essai de faire passer un tableau dynamique, un pointeur donc, d'un programme à un autre, l'adresse est bien passée et les champs non dynamique de la struct aussi (int et compagnie), mais le programme qui la reçoit n'arrive pas à accéder aux éléments du tableau. > > J'ai tout de suite pensé que l'adresse du tableau dynamique était relative à la zone mémoire du programme qui avait créé le tableau (j'ai testé avec un "new" mais aussi avec un "int tabX[2]; tab = tabX;" mais c'est pareil évidemment) et que c'est pour ça que le second ne trouvait rien à l'adresse indiqué, y'a-t-il un moyen de faire pointer le second où il faut ? (par exemple en récupérant l'adresse de début de la zone mémoire du 1er programme et en l'ajoutant à l'adresse du tableau) > > Je ne suis pas sûr de m'être bien expliqué. > Si ce n'est pas possible ça va m'obliger à placer des tableaux de grosse taille dans la struct, ça m'embêterait beaucoup :(
|
|
mercredi 9 juillet 2003 à 12:00:34 |
Re : Mémoire partagée et pointeur

BruNews
|
Pour une fois chapeau, question bien posee et tres claire. Effectivement tu ne passeras pas une adresse memoire d'un processus a un autre car elle sera toujours invalide. Ici ta solution sera un CreateFileMapping (voir dans MSDN) avec nom ou dans le fichier d'echange du systeme et place les donnees dedans, l'autre processus pourra les lire et modifier si besoin. BruNews, ciao...
------------------------------- Réponse au message : -------------------------------
> Bonjour, > > J'essai de faire passer un tableau dynamique, un pointeur donc, d'un programme à un autre, l'adresse est bien passée et les champs non dynamique de la struct aussi (int et compagnie), mais le programme qui la reçoit n'arrive pas à accéder aux éléments du tableau. > > J'ai tout de suite pensé que l'adresse du tableau dynamique était relative à la zone mémoire du programme qui avait créé le tableau (j'ai testé avec un "new" mais aussi avec un "int tabX[2]; tab = tabX;" mais c'est pareil évidemment) et que c'est pour ça que le second ne trouvait rien à l'adresse indiqué, y'a-t-il un moyen de faire pointer le second où il faut ? (par exemple en récupérant l'adresse de début de la zone mémoire du 1er programme et en l'ajoutant à l'adresse du tableau) > > Je ne suis pas sûr de m'être bien expliqué. > Si ce n'est pas possible ça va m'obliger à placer des tableaux de grosse taille dans la struct, ça m'embêterait beaucoup :(
|
|
mercredi 9 juillet 2003 à 13:08:09 |
Re : Mémoire partagée et pointeur

darsh99
|
héhé, je me doutais que tu répondrais, j'ai en effet utilisé le programme sur ton site qui se sert du File Mapping mais ça ne marche pas snif. Du côté serveur ça passe bien, le remplissage est ok, la lecture aussi, mais côté client ça passe moins bien, toujours un nombre qui n'a rien à voir avec le remplissage. Au moins ça me rassure qu'on me dise d'utiliser ça, ça veut dire que c'est juste que je m'y prends mal :). ------------------------------- Réponse au message : ------------------------------- > Si tu es sous Win32, utilise le File Mapping. Cela te permettra d'avoir une zone mémoire allouée par le système et nommée, c'est-à-dire que tu pourrais y accéder à partir de n programmes. > > Kaid - kaid.fr.st> > ------------------------------- > Réponse au message : > ------------------------------- > > > Bonjour, > > > > J'essai de faire passer un tableau dynamique, un pointeur donc, d'un programme à un autre, l'adresse est bien passée et les champs non dynamique de la struct aussi (int et compagnie), mais le programme qui la reçoit n'arrive pas à accéder aux éléments du tableau. > > > > J'ai tout de suite pensé que l'adresse du tableau dynamique était relative à la zone mémoire du programme qui avait créé le tableau (j'ai testé avec un "new" mais aussi avec un "int tabX[2]; tab = tabX;" mais c'est pareil évidemment) et que c'est pour ça que le second ne trouvait rien à l'adresse indiqué, y'a-t-il un moyen de faire pointer le second où il faut ? (par exemple en récupérant l'adresse de début de la zone mémoire du 1er programme et en l'ajoutant à l'adresse du tableau) > > > > Je ne suis pas sûr de m'être bien expliqué. > > Si ce n'est pas possible ça va m'obliger à placer des tableaux de grosse taille dans la struct, ça m'embêterait beaucoup :( >
|
|
mercredi 9 juillet 2003 à 13:11:21 |
Re : Mémoire partagée et pointeur

darsh99
|
Merci pour la question bien posée :)
Comme je dis à Kaid, je passe par un FileMapping (j'ai modifié son programme client/serveur). Mais tout ce qui est allocation dynamique (new, int* =, templates) donne le même résultat. J'ai cherché sur pas mal de forums, je n'ai croisé que des "échanges" de structures statiques.
------------------------------- Réponse au message : -------------------------------
> Pour une fois chapeau, question bien posee et tres claire. > Effectivement tu ne passeras pas une adresse memoire d'un processus a un autre car elle sera toujours invalide. > Ici ta solution sera un CreateFileMapping (voir dans MSDN) avec nom ou dans le fichier d'echange du systeme et place les donnees dedans, l'autre processus pourra les lire et modifier si besoin. > BruNews, ciao... > > > ------------------------------- > Réponse au message : > ------------------------------- > > > Bonjour, > > > > J'essai de faire passer un tableau dynamique, un pointeur donc, d'un programme à un autre, l'adresse est bien passée et les champs non dynamique de la struct aussi (int et compagnie), mais le programme qui la reçoit n'arrive pas à accéder aux éléments du tableau. > > > > J'ai tout de suite pensé que l'adresse du tableau dynamique était relative à la zone mémoire du programme qui avait créé le tableau (j'ai testé avec un "new" mais aussi avec un "int tabX[2]; tab = tabX;" mais c'est pareil évidemment) et que c'est pour ça que le second ne trouvait rien à l'adresse indiqué, y'a-t-il un moyen de faire pointer le second où il faut ? (par exemple en récupérant l'adresse de début de la zone mémoire du 1er programme et en l'ajoutant à l'adresse du tableau) > > > > Je ne suis pas sûr de m'être bien expliqué. > > Si ce n'est pas possible ça va m'obliger à placer des tableaux de grosse taille dans la struct, ça m'embêterait beaucoup :( >
|
|
mercredi 9 juillet 2003 à 13:15:09 |
Re : Mémoire partagée et pointeur

Kaid
|
Mais les autres valeurs sont t'elles exactes ? Si une seule valeur est erronée, cela ne doit pas être grand chose. Attention toute fois à la syncro entre le serveur et le client, tu peux utiliser un événement nommé, quand le serveur a terminé le remplissage pour le signifier au client. Kaid - kaid.fr.st------------------------------- Réponse au message : ------------------------------- > héhé, je me doutais que tu répondrais, j'ai en effet utilisé le programme sur ton site qui se sert du File Mapping mais ça ne marche pas snif. > > Du côté serveur ça passe bien, le remplissage est ok, la lecture aussi, mais côté client ça passe moins bien, toujours un nombre qui n'a rien à voir avec le remplissage. > > Au moins ça me rassure qu'on me dise d'utiliser ça, ça veut dire que c'est juste que je m'y prends mal :). > > > ------------------------------- > Réponse au message : > ------------------------------- > > > Si tu es sous Win32, utilise le File Mapping. Cela te permettra d'avoir une zone mémoire allouée par le système et nommée, c'est-à-dire que tu pourrais y accéder à partir de n programmes. > > > > Kaid - kaid.fr.st> > > > ------------------------------- > > Réponse au message : > > ------------------------------- > > > > > Bonjour, > > > > > > J'essai de faire passer un tableau dynamique, un pointeur donc, d'un programme à un autre, l'adresse est bien passée et les champs non dynamique de la struct aussi (int et compagnie), mais le programme qui la reçoit n'arrive pas à accéder aux éléments du tableau. > > > > > > J'ai tout de suite pensé que l'adresse du tableau dynamique était relative à la zone mémoire du programme qui avait créé le tableau (j'ai testé avec un "new" mais aussi avec un "int tabX[2]; tab = tabX;" mais c'est pareil évidemment) et que c'est pour ça que le second ne trouvait rien à l'adresse indiqué, y'a-t-il un moyen de faire pointer le second où il faut ? (par exemple en récupérant l'adresse de début de la zone mémoire du 1er programme et en l'ajoutant à l'adresse du tableau) > > > > > > Je ne suis pas sûr de m'être bien expliqué. > > > Si ce n'est pas possible ça va m'obliger à placer des tableaux de grosse taille dans la struct, ça m'embêterait beaucoup :( > > >
|
|
mercredi 9 juillet 2003 à 13:20:19 |
Re : Mémoire partagée et pointeur

darsh99
|
Les entiers (int entier1; int entier2) sont oks, pour le tableau d'entiers (int* tab1) l'adresse est la même, mais quand je lis tab1[i] les valeurs sont inexactes (d'ailleurs sur un tableau de 2 éléments j'ai toujours la même valeurs dans les 2 "cases"). Pour la synchro je n'en ai pas fait, je lance le serveur et une fois les instructions de remplissage terminées je lance le client. ------------------------------- Réponse au message : ------------------------------- > Mais les autres valeurs sont t'elles exactes ? Si une seule valeur est erronée, cela ne doit pas être grand chose. Attention toute fois à la syncro entre le serveur et le client, tu peux utiliser un événement nommé, quand le serveur a terminé le remplissage pour le signifier au client. > > Kaid - kaid.fr.st> > ------------------------------- > Réponse au message : > ------------------------------- > > > héhé, je me doutais que tu répondrais, j'ai en effet utilisé le programme sur ton site qui se sert du File Mapping mais ça ne marche pas snif. > > > > Du côté serveur ça passe bien, le remplissage est ok, la lecture aussi, mais côté client ça passe moins bien, toujours un nombre qui n'a rien à voir avec le remplissage. > > > > Au moins ça me rassure qu'on me dise d'utiliser ça, ça veut dire que c'est juste que je m'y prends mal :). > > > > > > ------------------------------- > > Réponse au message : > > ------------------------------- > > > > > Si tu es sous Win32, utilise le File Mapping. Cela te permettra d'avoir une zone mémoire allouée par le système et nommée, c'est-à-dire que tu pourrais y accéder à partir de n programmes. > > > > > > Kaid - kaid.fr.st> > > > > > ------------------------------- > > > Réponse au message : > > > ------------------------------- > > > > > > > Bonjour, > > > > > > > > J'essai de faire passer un tableau dynamique, un pointeur donc, d'un programme à un autre, l'adresse est bien passée et les champs non dynamique de la struct aussi (int et compagnie), mais le programme qui la reçoit n'arrive pas à accéder aux éléments du tableau. > > > > > > > > J'ai tout de suite pensé que l'adresse du tableau dynamique était relative à la zone mémoire du programme qui avait créé le tableau (j'ai testé avec un "new" mais aussi avec un "int tabX[2]; tab = tabX;" mais c'est pareil évidemment) et que c'est pour ça que le second ne trouvait rien à l'adresse indiqué, y'a-t-il un moyen de faire pointer le second où il faut ? (par exemple en récupérant l'adresse de début de la zone mémoire du 1er programme et en l'ajoutant à l'adresse du tableau) > > > > > > > > Je ne suis pas sûr de m'être bien expliqué. > > > > Si ce n'est pas possible ça va m'obliger à placer des tableaux de grosse taille dans la struct, ça m'embêterait beaucoup :( > > > > > >
|
|
mercredi 9 juillet 2003 à 16:22:40 |
Re : Mémoire partagée et pointeur

darsh99
|
Les variables créées dynamiquement attérissent dans la pile du processus qui les crée, c'est-à-dire que l'adresse est effectivement relative au processus.
Le problème a été réglé, pour l'instant ce n'est pas formulé à l'écrit mais la méthode est arrêté, elle marche et n'est pas une usine à gaz (bien :), j'essaierai de mettre la source ici après nettoyage des fonctions liées au projet d'ici quelques mois au plus.
------------------------------- Réponse au message : -------------------------------
> Les entiers (int entier1; int entier2) sont oks, pour le tableau d'entiers (int* tab1) l'adresse est la même, mais quand je lis tab1[i] les valeurs sont inexactes (d'ailleurs sur un tableau de 2 éléments j'ai toujours la même valeurs dans les 2 "cases"). > > Pour la synchro je n'en ai pas fait, je lance le serveur et une fois les instructions de remplissage terminées je lance le client.
|
|
Cette discussion est classée dans : programme, tableau, adresse, mémoire, pointeur
Répondre à ce message
Sujets en rapport avec ce message
pointeur-mémoire [ par baby3378 ]
bonjours à tous,Voila j'ai voulu créé un programme qui peut acceder à la mémoire grace aux pointuer, je m'explique:_un pointeur se place sur une adres
Convertir un tableau de vecteur de String en pointeur [ par fcoutel ]
Bonjour, J'ai cree un tableau dynamique a 2D de type string vector> tab, je voudrais savoir quel est le meilleur moyen de le convertir en char***.M
Prob lecture adresse mémoire [ par xmaz57000 ]
Voilà je viens de recevoir un ordinateur industriel qui dispose en standard de 8 entrées TOR.Malheureusement, il n'y a aucun driver qui permet de récu
arguments : adresse ou pointeur ? [ par vincemail ]
Bonjour, j'aimerai savoir s'il est préférable de passer en arguments d'une fonction (ou d'une méthode) des pointeurs ou bien des adresses... Je ne voi
code machine [ par Kangourou_Nomade ]
bonjour,j'ai un tableau char contenant du code machine,en gros, si on pointe du debut a la fin de mon tableau, on voit une image de programme.comment
Probleme avec delete [ ] [ par dchaux ]
Bonjour,n'étant que peu initié en programmation, je suis soumis à un problème dont je ne sais comment me sortir.Dans le cadre de mon programme, je cré
Erreur sur delete[] et pb alocation mémoire [ par dan34 ]
Salut,J'ai un soucis avec le bout de code suivant. En fait j'ai créé un objet qui contient un tableau de char dont j'alloue dynamiquement la taille en
convertion pointeur vers tableau [ par gdpasmini ]
Salut !Quelqu'un pourrait il me dire comment copier la chaine de caractere pointé par char * nom dans un tableau char name[] ??Merci d'avance !
Pointeurs ... [ par Ziman ]
Bonjour,J'ai une petite question, c'est pas vraiment un probleme de code mais plutot de théorie. Imaginez qu'en global j'ai déclaré un pointeur vers u
Structures en C / Win2k / Dev-Cpp [ par BaptX ]
Bonjour à tous,J'aurai quelques questions à vous poser en ce qui concerne le passage de structures en C. Comme c'est un peu comme les pointeurs, je me
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|