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

Langage C++ Discussion :

sizeof(rien_du_tout) == 1


Sujet :

Langage C++

  1. #21
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Citation Envoyé par camboui Voir le message
    ??
    Tu veux bien répondre à la question et me dire en quoi le CPU a besoin de connaitre et réserver une zone de mémoire dont il ne fera jamais rien ?
    Car sinon, les tests suivants seraient vrais.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Empty { };
     
    	void f()
    	{
    		Empty a, b;
    		if (&a == &b) cout << "impossible: report error to compiler supplier";
     
    		Empty* p1 = new Empty;
    		Empty* p2 = new Empty;
    		if (p1 == p2) cout << "impossible: report error to compiler supplier";
    	}
    C'est le code de Stroustrup dans sa FAQ, cf mon 1er lien.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  2. #22
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    J'ai bien compris les choix qui ont été fait à l'origine. Et je les remets en cause.
    Perso, ça ne me dérangerait pas qu'un tel code soit refusé par le compilateur (et même qu'un malloc(0) renvoit NULL).

    Et je n'ai toujours pas mes réponses: que va-t-on mettre dans la zone mémoire réservée ? Est-ce bien utile de comparer/manipuler des adresses de mémoire qui ne contiendront rien ? Le faites-vous souvent ?

  3. #23
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Ben oui, loufoque en a parlé :

    Citation Envoyé par loufoque Voir le message
    Un exemple a été cité plus haut, les allocateurs.
    Il y aussi le policy-based design, la méta-programmation, les tags d'identification, etc.
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  4. #24
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    que va-t-on mettre dans la zone mémoire réservée ?
    Rien. C'est juste que le modèle mémoire objet (object memory model) de C++ le nécessite.
    Maintenant, si tu veux proposer un modèle différent, tu peux toujours essayer. Il aura probablement d'autres problèmes...
    Boost ftw

  5. #25
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Ah enfin, quelqu'un qui me comprend

    Bon, c'est simple, le pointeur NULL est conceptuel, car la zone de mémoire d'adresse 0x00000000 existe vraiment. Pour les CPU aucune adresse mémoire n'est invalide d'ailleurs (au moins virtuellement).
    On pourrait bien proposer l'adresse 0xFFFFFFFF pour toutes les instances d'objets vides. Oui, toutes, cela ne me choque pas plus que ça. Il y aurait des problèmes ? Peut-être... Le code exemple de Stroustrup pose problème ? Je ne trouve pas. Soit le compilateur l'accepte et je ne vois pas de risque de plantage, soit il le refuse, ce que je préfère.

    Il y a sans doute toujours des problèmes quand on propose des concepts mais je ne vois rien d'insurmontable à priori dans ce cas-ci.
    Mais de là à ce qu'on accepte ce petit changement que je propose... (soupir... )

  6. #26
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    En C++, tous les objets ne sont pas des pointeurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct A {};
    struct B
    {
        int first;
        A second;
    };
    second est un A, pas un pointeur vers un A. Donc ton histoire de valeur de pointeur spéciale, c'est n'importe quoi.

    Bon, c'est simple, le pointeur NULL est conceptuel, car la zone de mémoire d'adresse 0x00000000 existe vraiment
    Rien n'oblige NULL a référencer l'adresse 0.
    Boost ftw

Discussions similaires

  1. sizeof() d'une structure
    Par tut dans le forum MFC
    Réponses: 12
    Dernier message: 29/08/2006, 18h21
  2. utilisation de sizeof
    Par Mokhtar BEN MESSAOUD dans le forum C
    Réponses: 13
    Dernier message: 02/12/2005, 18h16
  3. Sizeof d'un pointeur sur char ...
    Par Mike888 dans le forum C
    Réponses: 8
    Dernier message: 03/11/2005, 13h04
  4. sizeof
    Par drKzs dans le forum C
    Réponses: 6
    Dernier message: 04/10/2003, 23h48
  5. Erreurs (sizeof)
    Par deepfear dans le forum C
    Réponses: 13
    Dernier message: 25/09/2003, 13h56

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