Résultats de 1 à 9 sur 9

Sujet : Tableau 2D en mémoire partagée ?

  1. #1

    Tableau 2D en mémoire partagée ?

    Bonjour,

    je voudrais mettre un tableau multidimensionnel en mémoire partagée (2D, tableau de strings en fait).

    J\'utilise shmat pr mettre en mémoire partagée, quelle serait la syntaxe pour un tableau à 2 dimensions ? (voire un tableau de pointeurs si on doit faire ainsi).

    J\'ai essayé différentes manière mais ça ne va jamais. Est-ce possible ?

    Merci d\'avance !
    Guépard

  2. #2
    Membre MP
    Inscrit
    août 2013
    Messages
    6 517
    Je ne connais pas shmat désolé.

    Pourquoi ne pas faire deux boucles sur les indices et faire un fprintf tout simple ?

    Avec avant mettre la taille du tableau.
    Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
    N'oubliez pas le Tag [Résolu]http://www.ressources.moteurprog.com...rum/Resolu.gif.

    Initiez-vous à Delphi avec Turbo Delphi Explorer, au C ou au C++ avec Code::Blocks et C# avec Visual C# 2005 Express.

  3. #3
    Le travail doit impérativement s\'effectuer en RAM pour que le temps soit le plus court possible (sous peine d\'attendre des jours avant la fin des calculs) et je dois partager ce tableau en mémoire partagée (of course) car il y a plusieurs centaines de fils (processus) qui travaillent en parallèle. J\'ai avoir trouvé en utilisant un tableau à 1 dimension de structures (dans lesquelles je stocke mes chaînes). :

    Mais si qqun peut me dire comment faire pour des tableaux à plusieurs dimensions, je suis tjs preneur ! :8):

    Tchao
    Guépard

  4. #4
    Membre MP
    Inscrit
    août 2013
    Messages
    665
    tu peux faire un pointeur vers le premier élément de ce tableau puis incrémenter à chaque fois, c\'est ce qu\'il y a de plus performant. :wink:
    Code:
    int i;
    int tab[20];
    int *pt;
    
    for (i=0, pt=tab; i<20; i++, pt++)
    {
         // Pourquoi je met un commentaire ici moi, c\'est pas déjà assez clair  comme ça?
    }
    [col=#FFDD1A]( [/col][col=#FF0000]B[/col]e [col=#FF0000]S[/col]i[col=#FF0000]d[/col]e [col=#FFDD1A])[/col]

  5. #5
    Et je mets le pointeur en mémoire partagée ? Ca fonctionne ça ? Je vais essayer pour voir...
    Merci les gars !

    Tcho
    Guépard

  6. #6
    Membre MP
    Inscrit
    août 2013
    Messages
    6 517
    Salut Guepard53, ca va depuis le temps ?

    Tu veux pas nous dire si ça a marché ou non ?
    Merci
    Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
    N'oubliez pas le Tag [Résolu]http://www.ressources.moteurprog.com...rum/Resolu.gif.

    Initiez-vous à Delphi avec Turbo Delphi Explorer, au C ou au C++ avec Code::Blocks et C# avec Visual C# 2005 Express.

  7. #7
    Sorry les gars, c\'est pas sport de ma part de rien avoir dit... ops:

    Pour le pointeur sur le 1er élément du tableau en mémoire partagée, ça fonctionne pour les tableaux à 1D, plus j\'ai pas réussi.

    J\'ai contourné le problème pour que ça fonctionne avec des tableaux à 1D de structures comme j\'avais dit avant.

    Merci pour votre aide en tous cas ! :

    Tchao :8):
    Guépard

  8. #8
    Membre MP
    Inscrit
    août 2013
    Messages
    226
    En informatique, les tableaux à deux dimensions n\'existent pas. En fait ce sont des tableaux à une dimension \"déguisés\". Voic le principe :

    in tab[2][3];

    est en fait la même chose que :

    int tab2[2*3];

    et tab[1][1] c\'est pareil que tab2[(1*3)+1];
    tab[2][1] <=> tab2[(2*3)+1];
    tab[1][2] <=> tab2[(1*3)+2];

    C\'est la même chose pour les tableaux à trois dimensions, x dimensions en fait. Donc tu n\'as qu\'à envoyer ton tableau en deux dimensions en 1 dimension et faire une tite fonction pour simplifier l\'accès aux données.

    +

  9. #9
    Je connais l\'arithmétique des pointeurs dans les tableaux, rassure-toi ghost.. :8): :wink:

    Mais en mémoire partagée, ça fonctionnait pas comme je voulais car je voulais allouer chaque \'ligne de mon tableau 2D\' dynamiquement quand j\'en avais besoin (qd un fils avait fini son travail) car la taille allouée pouvait varier ENORMEMENT d\'un fils à l\'autre.

    Si je mettais un tableau de pointeurs en mémoire partagée, il n\'acceptait pas que je fasse des malloc (1 dans chaque fils) pour allouer un tableau qui serait pointé par un des pointeurs du tableau partagé.

    Je sais pas si c\'est clair, c\'est assez abstrait comme problème.

    Je ne pouvais pas mettre un gigantesque tableau à 1D en mémoire partagée pour prévoir assez pour chaque fils car c\'est le père qui récupère les données de ce tableau est il doit savoir où aller chercher.

    Mais c\'est ok, j\'ai contourné le problème (je ne sais plus très bien comment car le projet est au frigo pour le moment) et ça fonctionnait comme je voulais.

    Merci pour votre aide ! :
    Guépard

Informations du sujet

Utilisateur(s) parcourant ce sujet

il y a actuellement 1 utilisateur(s) parcourant ce sujet. (0 membre(s) et 1 visiteur(s))

Règles des messages

  • Vous ne pouvez pas créer de sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas importer de fichiers joints
  • Vous ne pouvez pas éditer vos messages
  •  
  • Les BB codes sont Activés
  • Les Smileys sont Activés
  • Le BB code [IMG] est Activé
  • Le code [VIDEO] est Activé
  • Le code HTML est Désactivé