Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1082 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] Connaitre la taille d'un buffer

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Connaitre la taille d'un buffer

n°1291820
ClosterHV
Posté le 25-01-2006 à 12:15:27  profilanswer
 

Salut,  
 
    Voici ma problématique : j'ai un buffer alloué dans une certaine partie du code. Je voudrais connaitre - au moment de le désallouer - sa taille.
 
    J'ai pensé à sizeof(), mais cette fonction ne me retourne pas cette information (d'ailleurs, je me demande ce qu'elle retourne : pour un buffer de "char" de 256 élements, sizeof me renvoie 4 ???).
 
    Comment peut-on procéder ??
 
Merci.

mood
Publicité
Posté le 25-01-2006 à 12:15:27  profilanswer
 

n°1291826
Elmoricq
Modérateur
Posté le 25-01-2006 à 12:21:02  profilanswer
 

Si tu as juste un pointeur sur une zone mémoire, tu ne peux pas en connaître la taille.  
 
Et si tu veux en connaître le nombre d'éléments pour la désallocation, j'imagine que c'est ce que tu as : des ** (pointeurs de pointeurs), au minimum.
 
Bref, la taille tu la connais à l'allocation, et il ne faut pas perdre cette valeur.


Message édité par Elmoricq le 25-01-2006 à 12:21:43
n°1291874
Emmanuel D​elahaye
C is a sharp tool
Posté le 25-01-2006 à 13:04:23  profilanswer
 

ClosterHV a écrit :

   Voici ma problématique : j'ai un buffer alloué dans une certaine partie du code. Je voudrais connaitre - au moment de le désallouer - sa taille.


Lorsque un bloc est alloué par malloc(), son adresse est retournée, et, pour des raisons pratiques évidentes (accéder au bloc, le libérer), cette adresse est stockée dans une variable capable de stocker une adresse, c'est à dire un pointeur du bon type (ou void). L'information de taille n'est pas stockée de manière visible (elle est probablement stockée par le système, mais on a aucun moyen standard d'y accéder). La stratégie consiste donc à stocker nous même la taille.
 
Pseudo-code


   size_t n = 123;
   T *p = malloc (sizeof *p * n);


Le couple {taille, adresse} étant inséparable, on a tout intérêt à entériner la chose :  


struct objet
{
   size_t n;
   T *p;
};
 
{
   struct objet mon_objet;
 
   mon_objet.n = 123;
   mon_objet.p = malloc (sizeof *p * mon_objet.n);
}  


On peut aussi encapsuler, rendre la structure anonyme etc. On ne va pas rappeler les 'Bonnes Pratiques' de codage, on les connait...
 
http://mapage.noos.fr/emdel/tad.htm
 

Citation :

   J'ai pensé à sizeof(), mais cette fonction ne me retourne pas cette information (d'ailleurs, je me demande ce qu'elle retourne : pour un buffer de "char" de 256 élements, sizeof me renvoie 4 ???).


C'est la taille en bytes d'une variable pointeur sur ta machine. Cette information ne permet évidemment pas de connaitre la taille de l'objet pointé.
 
http://mapage.noos.fr/emdel/notes.htm#pointeurs


Message édité par Emmanuel Delahaye le 25-01-2006 à 14:59:34

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1291923
skelter
Posté le 25-01-2006 à 14:10:12  profilanswer
 

et sizeof n'est pas une fonction mais un operateur, 'sizeof X' est une expression résolu à la compilation et donc constante

n°1291957
ClosterHV
Posté le 25-01-2006 à 14:43:13  profilanswer
 

Merci pour votre aide.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] Connaitre la taille d'un buffer

 

Sujets relatifs
[ASP.NET, VB] Taille mémoire maximum d'un object ?moyen de connaitre version php d'un site
[CSS] correspondance entre taille du texte et realité sur l'ecran[MySQL] Comment diminuer (optimiser ?) la taille d'un base
Connaitre le groupe d'un UserTaille de page apres publipostage à contraindre(Resolu)
Quelle est la taille max d'un fichier PHPconnaitre la taille de la BD postgres
JSF:créer dynamiquement des tables sans connaitre leur nombre 
Plus de sujets relatifs à : [C] Connaitre la taille d'un buffer


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR