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 :

Guru Of the Week n° 43 : copie sur écriture - première partie


Sujet :

C++

  1. #1
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut Guru Of the Week n° 43 : copie sur écriture - première partie
    L'idiome "copie sur écriture" (aussi connu sous les noms "copy-on-write", "COW" ou "implicite sharing") est une technique de programmation (qui devrait être) bien connue des développeurs utilisant Qt. Cette technique peut éviter les copies inutiles de gros objets (comme QString ou QVector), en réalisant la copie uniquement lors de la première modification d'un objet.

    Dans cet article, Herb Sutter détaille quelques implémentations possibles et comparer leurs performances respectives.

    Guru Of the Week n° 43 : copie sur écriture - première partie

    Connaissiez-vous cet idiome et son utilisation dans Qt ?
    Pensez-vous que les implémentations ou l'intérêt de cet idiome soient modifiés par l'arrivée du C++11 ?


    Retrouver l'ensemble des Guru of the Week sur la page d'index.

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 832
    Points : 2 625
    Points
    2 625
    Par défaut
    Il y a un petit problème de précision, au niveau des comparaisons de performances.

    chaîne de 1200 carac. chaîne de 12000 carac.
    ====================== =======================
    Croissance Croissance Croissance Croissance
    fixe exponentielle fixe exponentielle
    (32 bytes) (1.5x) (32 bytes) (1.5x)
    ---------- ----------- ---------- -----------
    Un caractère n'est PAS un octet, c'est un caractère, point. J'allais même dire que byte se traduit par octet, mais vu que j'ai vérifié avant, j'ai appris qu'en fait il s'agit de la plus petite unité adressable. Hors, ce n'est pas le cas de tous les caractères: c'est vrai pour les char, mais wchar_t est aussi un caractère, et est plus grand.

    Bon, ok, c'est jouer sur les mots, je l'accorde.

  3. #3
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Dans l'absolue, oui. D'un autre côté, l'article original date de 1998 (14 ans, presque plus vieux que moi ) on pouvait considérer que 1 char = 1 caractère = 1 byte

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    En fait, les correspondances 1char = 1 caractères = 1 byte et sizeof(char) = 1 sont vraies quoi qu'il arrive...

    La correspondance qui n'est pas forcément vraie, c'est 1byte = 8 bits = 1 octet.

    On a en effet trop souvent tendance à traduire byte par octet, parce que c'est ce qui se fait de manière classique sur les architectures PC, mais on pourrait parfaitement envisager une architecture dont le byte serait en fait codé sur 16 bits (pour supporter nativement le wchar_t ).

    A ce moment là, les correspondances 1 char = 1 caractère = 1 byte et sizeof(char) = 1, seraient toujours aussi vraies, même si, selon les tailles que l'on constate actuellement, nous aurions des correspondances proches de
    • sizeof(short) = 1 (hé oui: 16 bits )
    • sizeof(int) = 2
    • sizeof(long) = 2
    • sizeof(long long) = 4
    Finalement, le terme le moins mauvais pour traduire "byte" devrait être "multiplet" pour, effectivement, n'être basé sur aucune présomption quant à la taille de celui-ci

    C'est la raison pour laquelle C++ n'impose strictement rien hormis char <=short <= int <= long long et sizeof(char) = 1
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Pour "caractère", je pense que Freem parlait aussi du fait que les caractères ne sont plus forcement codés sur un char et donc pas 1 byte.

  6. #6
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    Pour "caractère", je pense que Freem parlait aussi du fait que les caractères ne sont plus forcement codés sur un char et donc pas 1 byte.
    Justement, ils sont codés sur un byte, toujours...

    Mais il ne sont plus forcément codé sur un octet

    Là est toute la différence
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 186
    Points : 17 126
    Points
    17 126
    Par défaut
    il ne ferait pas la distinction entre le caractère, symbole atomique d'un texte, et le char, taille de variable destinée à contenir un certain ensemble de caractère?

    Conviens-en, sizeof(wchar_t) n'est pas forcément 1…
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/11/2012, 23h04
  2. Guru of the Week 104
    Par gbdivers dans le forum C++
    Réponses: 15
    Dernier message: 25/04/2012, 16h27

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