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 :

connaitre l'espace occupé en octet


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de pi-2r
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2006
    Messages
    1 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 487
    Par défaut connaitre l'espace occupé en octet
    bonjour à tous,
    j'aimerai savoir s'il serai possible de connaitre l'espace occupé d'une variable en octet,pour pouvoir ensuite l'affichée.
    Il me semble qu'il faut utiliser l'opétateur sizeof mais j'aimerai en avoir la confirmation.
    Les pièges de l'Internet
    Helix, réponse à une intrusion


    "La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." Confucius
    "Si j'ai vu plus loin, c'est en me tenant sur les épaules de géants." Isaac Newton

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    c'est bien le cas.

    Par contre, n'utilise pas sizeof pour un tableau alloué dynamiquement : Tu n'auras droit qu'à la taille du pointeur (par contre, tu peux demander la taille d'un élément pointé)


    En fait, sizeof est surtout utilisé:
    • En C, pour l'allocation dynamique. N'est plus utilisé en C++ à cause de l'opérateur new, sauf pour des structures à taille variable.
    • À des fins de débogage, pour afficher directement le contenu binaire d'une variable. Si j'ai bien compris ta question, c'est l'usage que tu veux en faire?
    • Lors de transmission/écriture de données binaires avec des sockets ou des fichiers.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Rédacteur
    Avatar de pi-2r
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2006
    Messages
    1 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 487
    Par défaut
    Citation Envoyé par Médinoc
    En C, pour l'allocation dynamique. N'est plus utilisé en C++ à cause de l'opérateur new, sauf pour des structures à taille variable
    merci de ta réponse il est vrai que je peux utiliser l'opérateur new.ça m'est sortit de la tete .
    Les pièges de l'Internet
    Helix, réponse à une intrusion


    "La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." Confucius
    "Si j'ai vu plus loin, c'est en me tenant sur les épaules de géants." Isaac Newton

  4. #4
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par smoove
    Il me semble qu'il faut utiliser l'opétateur sizeof mais j'aimerai en avoir la confirmation.
    sizeof retourne la taille en nombre de bytes. En général les bytes sont des octets mais pas toujours et dans les cas où ils ne le sont pas, le résultat est plus pertinent.

    Si tu veux la taille en nombre de bits, multiplie le résultat de sizeof par CHAR_BIT qui se trouve dans limits.h (qui vaut au moins 8, et qui vaut exactement 8 sur les machines où les bytes sont des octets).

    Note par définition: un char prend un byte.

  5. #5
    Rédacteur
    Avatar de pi-2r
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2006
    Messages
    1 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 487
    Par défaut
    alors la je suis désolé , je ne voi pas comme déclarer <limits.h> et char_bits en utlisant l'opérateur sizeof.
    est-ce-que tu pourai me montrer un bout du programme ça serai sympa,

    Merci
    Les pièges de l'Internet
    Helix, réponse à une intrusion


    "La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." Confucius
    "Si j'ai vu plus loin, c'est en me tenant sur les épaules de géants." Isaac Newton

  6. #6
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include <limits.h>
    ...
    cout<<CHAR_BIT<<endl;

  7. #7
    Rédacteur
    Avatar de pi-2r
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2006
    Messages
    1 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 487
    Par défaut
    pourais tu etre un petit plus explicite, st'plais
    Les pièges de l'Internet
    Helix, réponse à une intrusion


    "La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." Confucius
    "Si j'ai vu plus loin, c'est en me tenant sur les épaules de géants." Isaac Newton

  8. #8
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <limits.h>
    #include <iostream.h>
     
     
    int main(void){
    cout<<"un int occupe "<<sizeof(int)*CHAR_BIT<<" bits."<<endl;
    return 0;
    }

  9. #9
    Membre chevronné
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Par défaut
    Hello,

    Citation Envoyé par smoove
    pourais tu etre un petit plus explicite, st'plais
    sizeof : opérateur des langages C++ et C qui renvoie la taille d'un objet en bytes.
    Un byte = un certain nombre de bits, 8 au minimum.

    Si tu veux connaitre le nombre de bits qu'utilise un byte dans ton implémentation, tu as dans un fichier d'entête <limits.h> ( ou <climits> ) une macro appelée CHAR_BIT qui te donne ce nombre de bits. Souvent c'est 8 (le minimum) mais cela peut être plus (16 bits par exemple).

    Donc si c'est uniquement la taille en bytes qui t'intéresse, sizeof est tout indiqué.
    Si c'est en octets (8 bits, pas plus, pas moins), et que CHAR_BIT de ton <limits.h> vaut 8, sizeof tout seul est ausi OK.
    Si c'est en octets (8 bits, pas plus, pas moins), et que CHAR_BIT de ton <limits.h> est différent de 8, il faut utiliser CHAR_BIT pour connaitre le nombre d'octets.

    nb Bytes (objet) = sizeof (objet)

    nb Octets (objet) = sizeof (objet) * CHAR_BIT / 8

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul de l'espace occupé par une Collection
    Par had35 dans le forum Général Java
    Réponses: 17
    Dernier message: 13/09/2006, 11h52
  2. Réponses: 12
    Dernier message: 11/09/2006, 15h54
  3. [ASA]Espace occupé par une Table
    Par madina dans le forum Sybase
    Réponses: 3
    Dernier message: 17/07/2006, 17h16
  4. Espace occupé par une table
    Par Mihaela dans le forum Oracle
    Réponses: 3
    Dernier message: 18/06/2006, 22h09
  5. Réponses: 4
    Dernier message: 20/04/2006, 13h50

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