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 :

Type booléen modifié


Sujet :

C++

  1. #1
    Membre éclairé Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Par défaut Type booléen modifié
    Bonjour,

    Je voudrai savoir s'il serait possible de pouvoir créer un type booléen ne prenant qu'un bit en mémoire afin d'économiser de la place. En effet, je me suis aperçu que le type 'bool' prenait la même taille en mémoire qu'un entier. Merci d'avance à ceux qui pourront m'éclairer


    Nico.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    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 391
    Par défaut
    Je vrois bien avoir lu ici qu'un vector< bool > était implémenté de manière économique. Mais cela doit dépendre de l'implémentation...

    Quant au type bool lui-même, lui aussi dépend peut-être de l'implémentation (bien qu'il y ait sans doute des contraintes de compatibilité pour une même plate-forme) : le bool pourrait très bien tenir dans un char...
    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
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juin 2006
    Messages : 56
    Par défaut
    Je vais peut etre dire une connerie, mais a tu pensé au champs de bits?
    le problème c'est qu'il me semble qu'il prennent quand meme un octet en mémoire, a voir...

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Est-ce que tu as réellement besoin d'économiser cette place, ou bien il s'agit juste du reflexe de programmeur "c'est pas optimum -> j'optimise" ?

  5. #5
    Membre éclairé Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Par défaut
    Citation Envoyé par Médinoc
    Je vrois bien avoir lu ici qu'un vector< bool > était implémenté de manière économique. Mais cela doit dépendre de l'implémentation...

    Quant au type bool lui-même, lui aussi dépend peut-être de l'implémentation (bien qu'il y ait sans doute des contraintes de compatibilité pour une même plate-forme) : le bool pourrait très bien tenir dans un char...
    Sais-tu sur quel site je pourrai avoir plus d'informations à ce sujet ?

    Citation Envoyé par QuantuX
    Je vais peut etre dire une connerie, mais a tu pensé au champs de bits?
    le problème c'est qu'il me semble qu'il prennent quand meme un octet en mémoire, a voir...
    Comment ca fonctionne en gros les champs de bits ?

    Citation Envoyé par Laurent Gomila
    Est-ce que tu as réellement besoin d'économiser cette place, ou bien il s'agit juste du reflexe de programmeur "c'est pas optimum -> j'optimise" ?
    Je pense qu'il s'agit juste d'un réflexe de programmeur mais j'aimerai bien trouver une solution à ce problème

  6. #6
    Membre chevronné Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Par défaut
    En effet, je me suis aperçu que le type 'bool' prenait la même taille en mémoire qu'un entier.
    Non, ça dépend de l'implémentation, sizeof(bool) vaut 1 chez moi.

  7. #7
    Membre chevronné Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Par défaut
    A l'heure d'aujourd'hui, les PC les plus courant possèdent entre 512Mo et 2Go de Ram. Si un bool, prend la même place qu'un entier, prenons par exemple 8 octets (64 bits), alors en gros sur 512 Mo soit 536870912 octets, on peut stocker 67108864 bool, comme on est pas les seul en ram on va dire 50000000 bool....
    Déjà ça fait pas mal de bool... Et encore c'est pour 510 Mo.
    Si tu n'as pas assez de 50000000 bool dans ton programme, où allons nous !!!!

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Je pense qu'il s'agit juste d'un réflexe de programmeur mais j'aimerai bien trouver une solution à ce problème
    Sauf que ça n'en est pas un.

    Déjà pour placer un booléen par bit, il en faut quelques uns, sinon tu n'optimises rien du tout (la taille minimum d'une variable étant de 8 bits).

    Ensuite typiquement tu peux utiliser les champs de bits :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct BitField
    {
        int Bit0 : 1,
            Bit1 : 1,
            ...
    };
    Ou encore envelopper tout ça dans une classe qui utilise les opérateurs de masque et de décalages bits à bits. Mais c'est déjà ce que fait (certainement) std::bitset.

  9. #9
    Membre éclairé Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Par défaut
    Citation Envoyé par Laurent Gomila
    Sauf que ça n'en est pas un.
    Alors pourquoi poses-tu la question si tu connais déjà la réponse.

  10. #10
    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 : 38
    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
    Attention car les champs de bits ne sont pas portable.
    De même des opérateurs bitwise car la taille des variables peut changer d'une plateforme à une autre.

  11. #11
    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 seriousme
    Attention car les champs de bits ne sont pas portable.
    C'est un moyen portable d'essayer de réduire la mémoire d'un objet.

    (Ce qui n'est pas portable, c'est utiliser des champs de bits pour avoir des placements en mémoire précis, par exemple pour lire des fichiers où accéder à du hard)

    De même des opérateurs bitwise car la taille des variables peut changer d'une plateforme à une autre.
    De nouveau, on peut s'en servir de manière parfaitement portable.

  12. #12
    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 : 38
    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
    Oui leur portabilité est donc relative.

Discussions similaires

  1. type booléen dans access
    Par imeys dans le forum Access
    Réponses: 6
    Dernier message: 19/02/2007, 21h08
  2. Myql type booléen
    Par kitty2006 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 22/08/2006, 21h48
  3. Type booléen sous Firebird 1.5
    Par rprom1 dans le forum SQL
    Réponses: 2
    Dernier message: 14/02/2006, 16h59
  4. type utilisateur modifier
    Par shadow31 dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 15/11/2005, 14h58
  5. Index sur une col. de type 'booléen": utile?
    Par Atreides dans le forum Oracle
    Réponses: 2
    Dernier message: 28/01/2005, 13h12

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