IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

retrouver la taille d'un malloc


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 226
    Points : 39
    Points
    39
    Par défaut retrouver la taille d'un malloc
    Bonjour,

    je suis entrain de développer un programme ou j'ai besoin d'utiliser des pointeurs void.

    par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void *ptr;
     
    ptr = malloc(sizeof(int) * 7);
    size = sizeof(int) * 7;


    j'ai besoin de pouvoir retrouvé la taille (size dans l'exemple) du malloc plus tard. comment je peux faire ? (car le 7 est une variable et ce n'est pas toujours un type int)

    Est ce qu'il existe une technique pour retrouvé la longueur a partir de l'adresse du debut du malloc ?
    merci d'avance pour votre aide

  2. #2
    Membre émérite
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Points : 2 601
    Points
    2 601
    Par défaut
    Bonjour,

    réponse courte : non.

    réponse un peu plus longue :

    Il faut garder quelque part la taille allouée pour l'objet que tu manipules. Il faut aussi (et impérativement) que la taille soit de type entier, non signée (du moins toujours positif), et compatible avec size_t sans en dépasser la capacité.

    Certaines extensions des libc permettent de retrouver la taille allouée mais c'est non standard et dépend fortement de la plateforme utilisée. Il y a aura cependant quelques différences. En effet le gestionnaire de mémoire ne doit pas donner une zone mémoire de taille exactement égale à celle demandée. Pour des raisons de performances il peut allouer plus que demander. Par exemple si tu demandes 100 octets il peut en allouer 128. La taille de 100 est définitivement perdue si tu ne la gardes pas. La taille 128 est la mémoire totale allouée qui peut ne pas correspondre à tes attentes.

  3. #3
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Comme l'a très bien expliqué picodev, dans le cas général c'est à toi en tant qu'appelant de garder trace de la taille de tes buffers. Tu peux te faire une petite interface très simple pour ce faire, exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    struct buf {
        void *ptr;
        size_t size;
    };
     
    #define BUF_INITIALIZER { .ptr = NULL, .size = 0 }
     
    struct buf buf_alloc(size_t size) {
        struct buf b = BUF_INITIALIZER;
     
        void *const ptr = malloc(size);
        if (ptr) {
            b.ptr = ptr;
            b.size = size;
        }
     
        return b;
    }

Discussions similaires

  1. Div contentEditable modifier/retrouver taille fonte
    Par defacta dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/07/2013, 10h54
  2. malloc pour des grandes tailles mémoires
    Par SuperSeb95 dans le forum C
    Réponses: 9
    Dernier message: 21/05/2012, 14h40
  3. Taille d'allocation de Malloc
    Par eric30eric dans le forum Bibliothèque standard
    Réponses: 9
    Dernier message: 02/11/2010, 15h32
  4. [malloc] compréhension autour de la taille
    Par EvaristeGaloisBis dans le forum Débuter
    Réponses: 2
    Dernier message: 08/08/2009, 17h14
  5. Malloc et grandes tailles
    Par Enthalpix dans le forum C
    Réponses: 5
    Dernier message: 27/06/2008, 09h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo