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 :

Copie de bloc de mémoire (avec Boost ?) ?


Sujet :

C++

  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut Copie de bloc de mémoire (avec Boost ?) ?
    Hello,

    Quelle est la meilleure méthode pour copier des blocs de mémoire ?
    Utiliser memcpy du C, ou il y a mieux ?

    MercI;

  2. #2
    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
    Passer à un niveau supérieur en utilisant des outils qui gère la mémoire à notre place et qui sont copiables sans se poser de questions.
    "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)

  3. #3
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Effectivement, il doit y avoir d'autre moyen de procéder.
    Sinon oui, memcpy est très rapide. Je pense pas qu'on fasse mieux...

  4. #4
    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
    Sinon oui, memcpy est très rapide. Je pense pas qu'on fasse mieux...
    Bien sûr que si on fait mieux. memcpy c'est pour le cas général.
    Dans les cas particulier où tu sais que ta mémoire est alignée de telle manière ou que tu un nombre d'objets à copier multiple d'un certain nombre, tu peux aller bien plus vite.

    Mais bon, normalement tu n'as pas à copier la mémoire, sauf si tu fais du C. Dans quel cas c'est l'autre forum.
    Boost ftw

  5. #5
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par loufoque Voir le message
    Dans les cas particulier où tu sais que ta mémoire est alignée de telle manière ou que tu un nombre d'objets à copier multiple d'un certain nombre, tu peux aller bien plus vite.
    En effet, mais moi j'appelle ça de la "bricole". Souvent on comprend plus rien derrière quand on reprend le programme...

  6. #6
    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
    Au contraire, c'est beaucoup plus clair, puisque tu n'as pas à traiter les cas limites...
    Et ce n'est certainement pas de la bricole. Si tu as des invariants, autant les utiliser.
    Boost ftw

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut Oups...
    Désolé de mon absence de réponse... J'ai été réquisitionné ponctuellement sur un autre projet peu après avoir posé ma question.

    J'explique dans quel cas je dois effectuer cette copie de zone mémoire.

    Je dispose d'un tampon d'image exprimé dans un espace dont le Y va de haut en bas, et je dois transformer ce tampon pour afficher l'image dans un espace dont le Y va de bas en haut.

    La première ligne doit donc devenir la dernière, la deuxième la pénultième, etc.

    Je fais donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    RV_PIXEL* pixels = new RV_PIXEL[BlocWidth * BlocHeight];
    unsigned int index = 0;
    unsigned int lineSize = BlocWidth*sizeof(RGBAColor);
     
    for( y=0, index=0; y<BlocHeight; y++ )
    {
    	offset = BlocWidth*(BlocHeight-y-1);
    	memcpy(&(pixels[index]), &(rgba_buffer[offset]), lineSize );
    	index += BlocWidth;
    }
    BlocWidth / BlocHeight : taille de l'image
    pixels / rgba_buffer : pointeurs vers des structures représentant un pixel RGBA

    Je n'ai pas le choix sur la nature de pixels : il est imposé par une API C++, pourtant).
    rgba_buffer est de mon fait. Je pourrais éventuellement lui donner une coloration plus orientée C++, mais les pixels viennent de toute façon d'un programme C sous forme d'un pointeur sur une zone mémoire.

    S'il y a mieux, you're welcome !

  8. #8
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107

Discussions similaires

  1. sed avec copie de blocs
    Par redofr dans le forum Linux
    Réponses: 4
    Dernier message: 26/03/2008, 16h29
  2. Copie de blocs mémoires
    Par Dmnbp7ip dans le forum C++
    Réponses: 2
    Dernier message: 18/12/2007, 11h58
  3. Problème de mémoire avec BDE
    Par Machuet dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/07/2004, 10h11
  4. Problème mémoire avec une dll par chargement dynamique
    Par widze19 dans le forum C++Builder
    Réponses: 6
    Dernier message: 15/12/2003, 13h20
  5. Comment bien gerer la mémoire avec les TStringList?
    Par david_chardonnet dans le forum Langage
    Réponses: 5
    Dernier message: 18/06/2003, 09h57

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