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++

  1. #1
    Rédacteur
    Avatar de pi-2r
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2006
    Messages
    1 486
    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 486
    Points : 2 440
    Points
    2 440
    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 sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    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 486
    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 486
    Points : 2 440
    Points
    2 440
    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 éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    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.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  5. #5
    Rédacteur
    Avatar de pi-2r
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2006
    Messages
    1 486
    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 486
    Points : 2 440
    Points
    2 440
    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 : 37
    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
    Points : 3 958
    Points
    3 958
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include <limits.h>
    ...
    cout<<CHAR_BIT<<endl;
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  7. #7
    Rédacteur
    Avatar de pi-2r
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2006
    Messages
    1 486
    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 486
    Points : 2 440
    Points
    2 440
    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 : 37
    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
    Points : 3 958
    Points
    3 958
    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;
    }
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  9. #9
    Rédacteur
    Avatar de pi-2r
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2006
    Messages
    1 486
    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 486
    Points : 2 440
    Points
    2 440
    Par défaut
    OK un grand merci seriousme
    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

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Points : 387
    Points
    387
    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+

  11. #11
    Rédacteur
    Avatar de pi-2r
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2006
    Messages
    1 486
    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 486
    Points : 2 440
    Points
    2 440
    Par défaut
    Citation Envoyé par Foobar1329
    Si c'est en octets (8 bits, pas plus, pas moins)
    quelle mesure y a-t-il en dessous de l'octet et comment fait-on pour la calculer?
    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

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

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

    Citation Envoyé par smoove
    quelle mesure y a-t-il en dessous de l'octet et comment fait-on pour la calculer?
    En dessous,

    Il y a le "nibble" ou "nybble" qui est la moitié d'un byte. Aussi, toujours par abus de langage, comme le byte vaut très souvent 8 bits, le nibble vaut très souvent 4 bits. C'est un quartet. C'est un terme qui désigne souvent un digit hexadecimal.

    Pour savoir combien de quartets fait un objet, c'est sizeof(objet) * CHAR_BIT / 4

    Et encore en dessous, et bien, c'est le bit.

    A+

  13. #13
    Rédacteur
    Avatar de pi-2r
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2006
    Messages
    1 486
    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 486
    Points : 2 440
    Points
    2 440
    Par défaut
    ok 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

+ 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