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 tutoriel alloc sécurisée et opérateur new


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 tutoriel alloc sécurisée et opérateur new
    Bonsoir tout le monde !
    J'ai lu avec beaucoup d'intérêt le tutoriel sur l'allocation sécurisée de mémoire :
    http://haypo.developpez.com/article/halloc/

    J'ai notamment été surpris de voir avec quelle facilité on peut redéfinir l'opérateur new :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #undef new
    #undef delete
     
    ...
     
    // Surchage de l'opérateur new
    void* operator new (size_t size, const char* nom, const unsigned long ligne)
      throw (std::bad_alloc)
    {
      return MallocSecurise (size, nom, ligne);
    }
    Ma question est la suivante :
    j'aimerais utiliser les new de mon programme actuel, mais les encadrer par du code de calcul de temps (une sorte de profiling inline).
    J'ai bien sûr pensé à tous les changer, mais vu la quantité, j'en ai pour deux semaines .
    Du coup, est-il possible de s'inspirer de la méthode précédente pour que, lors d'un appel à new dans le code, il remplace ce new par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //un bout de code
    start();
    //Allocation mémoire
    my_ptr = new byte[3];
     
    // un autre bout de code
    stop()
    Merci d'avance !

  2. #2
    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
    Pas vraiment.
    Tu peux cependant transformer ça en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my_ptr = new(prof) byte[3];
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    struct prof_t
    {
    }:
     
    extern prof_t prof;
     
    void* operator new(size_t size, prof_t)
    {
       start();
       void* p = ::operator new(size);
       stop();
       return p;
    }

  3. #3
    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
    Ne pas oublier de surcharger new [] pour l'allocation de tableaux.

  4. #4
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Ca signifie que je suis obligé de modifier tous les appels à new (et new[] effectivement) pour adapter le code...
    Pas moyen de le faire en surchargeant new (et new[] ), et en disant que c'est cette surcharge "maison" qu'il faut utiliser ?

  5. #5
    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
    Pas moyen de le faire en surchargeant new (et new[] ), et en disant que c'est cette surcharge "maison" qu'il faut utiliser ?
    Normalement si, mais puisque loufoque a suggéré le contraire il y a peut-être une bonne raison de ne pas le faire.

  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
    OK, laquelle est-ce ?
    Comment faire si je veux quand même le faire ?

Discussions similaires

  1. Surcharge de l'opérateur new
    Par :Bronsky: dans le forum C++
    Réponses: 17
    Dernier message: 27/10/2010, 21h33
  2. question sur l'opérateur new
    Par deubelte dans le forum Débuter
    Réponses: 54
    Dernier message: 29/03/2010, 10h47
  3. Redéfinition opérateurs new et delete globaux
    Par bolhrak dans le forum C++
    Réponses: 8
    Dernier message: 30/07/2007, 11h34
  4. Différence opérateur new et constructeur
    Par Burckel dans le forum C++
    Réponses: 7
    Dernier message: 16/11/2006, 10h21
  5. namespace et opérateur new
    Par Sylvain Rousseau dans le forum C++
    Réponses: 3
    Dernier message: 06/01/2005, 23h24

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