Partage
  • Partager sur Facebook
  • Partager sur Twitter

Id par zone mémoire

    15 août 2017 à 0:41:38

    salut, je cherche à identifié une structure par un int, afin de savoir combien d'instances de cette structure sont créés, ... Naturellement j'ai penser à utiliser l'adresse mémoire de la structure ( récupérer via un pointeur bien-sûr ). Si je poste c pour demander si c'est une bonne idée : est-ce qu'il arrive qu'une adresse mémoire soit plus grand qu'un int ?, ... Et si ce n'est pas le cas, ce que j'ai comme solution alternative.

    je vous remercie tous par avance !

    -
    Edité par TomAnderson1 15 août 2017 à 0:42:21

    • Partager sur Facebook
    • Partager sur Twitter
      15 août 2017 à 0:50:35

      Quand on stocke une adresse on utilise un pointeur pas un entier...
      • Partager sur Facebook
      • Partager sur Twitter
        15 août 2017 à 10:37:42

        Bonjour et merci de ta réponse. Je sais, mais il suffit de faire un cast pour obtenir un entier, même si c pas très élégant :

        int id(my_struct *th){

        return((int)th);

        }

        int main()

        {

        my_struct st;

        printf("%d", id(&s));

        return 0;

        }

        j'ai quoi comme alternative ?

        -
        Edité par TomAnderson1 15 août 2017 à 10:38:21

        • Partager sur Facebook
        • Partager sur Twitter
          15 août 2017 à 11:02:52

          Pourquoi caster en entier une adresse ? Autant retourner directement l'adresse.

          TomAnderson1 a écrit:

          ... est-ce qu'il arrive qu'une adresse mémoire soit plus grand qu'un int ?, ... Et si ce n'est pas le cas, ce que j'ai comme solution alternative.

           Tu ne voulais pas dire : Et si c'est le cas.

          Sinon pour répondre à ta question oui.

          Les types définis dans stdint devraient t'intéresser : intptr_t uintptr_t

          • Partager sur Facebook
          • Partager sur Twitter
            15 août 2017 à 11:21:21

            tu as raison, c'est bien ce que je voulais dire... pourtant j'ai relu mon message. y a pas un moyen simple d'identifier une instance de structure par un int ? un truc tout bête ?
            • Partager sur Facebook
            • Partager sur Twitter
              15 août 2017 à 15:54:23

              Si tu souhaite une réponse fiable, il faudrait plutôt expliquer le contexte.

              Après bien sur que l'adresse peut permettre de les distinguer. Tu peux la garder dans un pointeur.

              • Partager sur Facebook
              • Partager sur Twitter
                16 août 2017 à 18:53:11

                je cherche juste a récupérer un identifiant pour chaque instances de structures créées sous forme d'entier.
                • Partager sur Facebook
                • Partager sur Twitter
                  16 août 2017 à 19:07:32

                  Comme te le suggère GnuAs__ converti l'adresse en  uintptr_t.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 août 2017 à 20:06:37

                    TomAnderson1 a écrit:

                    salut, je cherche à identifié une structure par un int, afin de savoir combien d'instances de cette structure sont créés, ...

                    Je me pose quand même la question de la pertinence de la démarche et son contexte...

                    Cela suppose deja par exemple que toutes les variables soient répertoriables par le code de vérification!

                    Cela suppose ensuite que les copies ne seront pas prises en comptes... (contenu identique, adresses différentes!)

                    Bref le contexte, encore le contexte...

                    • Partager sur Facebook
                    • Partager sur Twitter
                    ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                      16 août 2017 à 20:16:20

                      En fait j'essaye de faire de l'OOC ( à titre expérimental ), et d'utiliser les pointeurs intelligents comme en c++. Dans cet optique, j'ai besoin que chaque objet ( representé par une structure ), me renvoie un identifiant ( et même les copies, afin de pouvoir libérer la mémoireoccupé par ces dernières ). Me demander pas de code, pour l'instant ce n'est que de la théorie et de l'experimentation...
                      • Partager sur Facebook
                      • Partager sur Twitter
                        16 août 2017 à 20:48:26

                        Euh mmmmh, c'est Et la grammaire adaptée du c++ Et surtout le compilateur qui génère du code supplémentaire qui font que la Conception Orienté Objet est possible.... ces mécanismes ne sont pas dispo en C!

                        Si tu veux considérer une structure comme un Objet, alors il faut que tu arrêtes l'accès manuel aux structures et que tu passes systématiquement par des fonctions.

                        Tu auras donc et devras donc toujours utiliser une fonction pour la création d'un "objet", pour la copie d'un objet, pour la destruction d'un objet etc... et ce sont ces fonctions qui pourront stocker de anières automatiques des informations supplémentaires (nombre d'instances de l'objet?, mémoires résevée?)dans une structure adaptée...

                        Evidement toujours passer par ces fonctions feront qu’écrire du code comme cela en C va vite devenir pénible car très verbeux....

                        -
                        Edité par breizhbugs 16 août 2017 à 20:55:03

                        • Partager sur Facebook
                        • Partager sur Twitter
                        ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                          16 août 2017 à 20:51:51

                          Je sais, mais il paraît que en étant rigoureux on peut faire un truc qui s'en approche. As-tu entendu parler de Gobject ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            16 août 2017 à 20:59:02

                            plop j'ai éditer mon message précédent pendant que tu rédigeais le tiens.

                            Non jamais entendu parler de gobjet, mais j'ai un peu touché à direcshow en C, et si ce n'est pas compliqué à écrire, c'est quand un poil plus pénible à utiliser qu'en c++!

                            • Partager sur Facebook
                            • Partager sur Twitter
                            ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                              16 août 2017 à 21:08:37

                              j'aimerais bien utiliser Gobject, mais j'arrive ni à savoir si c portable, ni a la téléchargé, ni a trouver les sources, ni a l'installer ...

                              -
                              Edité par TomAnderson1 16 août 2017 à 21:12:31

                              • Partager sur Facebook
                              • Partager sur Twitter
                                16 août 2017 à 22:19:20

                                Les pointeurs ont comme taille 64bits pour les processeurs 64bits et 32 bits pour les processeurs 32 bits sur les architectures classiques. Il y a des architectures où c'est un peu plus compliqué mais tu ne les rencontreras pas. il faudrait utiliser donc des int32_t ou des int64_t pour ne pas avoir de problème ...

                                Edit: utiliser les types uintptr_t est une meilleure solution pour y faire abstraction

                                -
                                Edité par mouom 16 août 2017 à 23:57:36

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  16 août 2017 à 23:08:36

                                  Et une conversation n'est pas envisageable ?
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Id par zone mémoire

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown