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 :

Question liée à memset


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut Question liée à memset
    Salut tout le monde !

    J'aimerai modifier (accélérer) les deux boucles suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    px = new int[output_width];
    for(i=0; i<crop_x0; i++)  px[i] = -128;
    for(i=crop_x0+crop_w; i<output_width; i++)  px[i] = -128;
    J'ai pensé à memset() mais je ne pense pas que ce soit possible...
    Pouvez-vous m'éclairer ?

    Merci d'avance !

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Pour ce que j'en sais, un memset ne sera pas plus rapide qu'une boucle for. Je dirais même plus: je ne connais rien de plus rapide qu'une boucle for pour initilialiser un tableau, surtout si c'est un tableau d'entiers.

  3. #3
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    OK.
    J'ai une autre question, bête .
    J'ai deux tableaux, initialisés avec des valeurs, et j'aimerais avoir un pointeur qui pointe sur l'un, ou l'autre, en fonction d'un flag...
    J'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int **p1;
    static int tab1[16][10]={0};
    static int tab2[16][10]={1};
     
    if (flag)
    {
      p1=(int **)tab1;
    }
    else
    {
      p1=(int **)tab2;
    }
    Mais ça ne fonctionne pas...
    L'erreur doit être bête, mais je ne la vois pas.


    EDIT : J'ai modifié le code, comme indiqué ci-dessus, et ça fonctionne.

  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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Tu ne peux pas pointer sur un tableau à deux dimensions avec un int* ou un int**.
    Tu ne peux pas non plus transtyper un tableau statique à deux dimensions en pointeur sur pointeur d'int. Ca ne représente pas du tout la même chose en mémoire.

    La solution est de donner le bon type à p1 (référence sur tableau à deux dimensions) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    static int tab1[16][10]={0};
    static int tab2[16][10]={1};
    int (&p1)[16][10] = flag ? tab1 : tab2;
    Tu peux aussi utiliser un pointeur (int (*tab)[16][10]) si tu dois réaliser l'affectation après la déclaration.

  5. #5
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    2 remarques:

    1/ La solution que tu proposes (progfou) ne fonctionne pas. Pour s'en convaincre, rajoute la ligne suivante aprés l'affectation de p1:
    Pourquoi? Laurent l'a trés bien expliqué. D'ailleurs, je l'ignorais, merci Laurent

    2/ Le code:
    va initialiser à 0 uniquement la première 'case' de ton tableau.

  6. #6
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Oui, tout à fait, je me suis pris un segmentation fault .
    Merci laurent .

  7. #7
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    ha oui, une dernière remarque:
    il est tout de même beaucoup plus pratique de manipuler des tableaux à 1 dimensions qu'à 2 dimensions... et encore plus pratique d'utiliser des vecteurs (std::vector)... et il y a également le boost::multi_array qui est trés pratique.

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par r0d
    ha oui, une dernière remarque:
    il est tout de même beaucoup plus pratique de manipuler des tableaux à 1 dimensions qu'à 2 dimensions... et encore plus pratique d'utiliser des vecteurs (std::vector)... et il y a également le boost::multi_array qui est trés pratique.
    lol,
    j'y croi pas que std::vector est aussi rapide qu'un tableau
    c'est juste plus securisé.
    Puis le prob d'un tableau c'est comme tout faut savoir s'en servire

  9. #9
    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
    Par défaut
    j'y croi pas que std::vector est aussi rapide qu'un tableau
    Pourtant, c'est le cas.
    Pourquoi ça ne le saurait pas ?

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par loufoque
    Pourtant, c'est le cas.
    Pourquoi ça ne le saurait pas ?

    ben a premier vu, parcourir un tableau directement et plus rapide que de le parcourir par des fonctions (cas du std::vector). Aprés je peut me trompé, mais meme les iterator sont pas de vrai "pointeur" (accés plus lent) et je n'ai jamais vu, pour du traitement d'image, une seule lib qui utilise le std::vector pour son buffer. Ou meme pour des partie les plus optimisé d'un code. Donc pour moi, les vector encapsule un tableau, il est donc plus lent du a l'accés par des fonctions. Par contre il est plus securisé.

  11. #11
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Tout peut être correctement inliné (même les opérations sur les itérateurs), donc cela revient strictement aux mêmes opérations que tu aurais faites sur ton tableau brut. Donc tu peux t'attendre à n'avoir aucune perte de performance après une compilation optimisée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [1.x] Questions liées au getRelatedModelName()
    Par Gauldo dans le forum Symfony
    Réponses: 7
    Dernier message: 01/02/2010, 15h01
  2. [WAMP] Questions liées au réseau
    Par steeve93800 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 9
    Dernier message: 08/02/2008, 12h33
  3. [Htaccess] Petites questions liées à la sécurité
    Par jeanphi6 dans le forum Apache
    Réponses: 4
    Dernier message: 21/11/2007, 08h50
  4. Petite question liée aux structures
    Par progfou dans le forum C++
    Réponses: 9
    Dernier message: 24/04/2007, 13h46
  5. Petite question liée au Javascript
    Par systemofaxav dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 26/03/2006, 14h29

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