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 :

[C++] Mémoire Tableaux de grande taille


Sujet :

Langage C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 47
    Points : 33
    Points
    33
    Par défaut [C++] Mémoire Tableaux de grande taille
    Bonjour,
    je suis sur que c'est une question qui revient assez souvent et pourtant malgré une matinée de recherche sur le forum, je n'ai pas encore eu de réponse.
    Mille excuses si j'ai loupé le fil qu'il ne fallait pas louper.
    Voila le code suspect :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    // Allocation d'un tableau de nSize element
    template <class TYPE> 
    inline bool C3Array<TYPE>::Alloc(unsigned long nSize)
    {
    	InitMembers();
     
    	if (nSize>0)
    	{
    		try{
    			m_pData= new TYPE [nSize] ;
    			if(m_pData != 0)
    			{
    				m_nSize=nSize;
    				return true;
    			}
    		}
    		catch(CException* e){
    			CString msg;
    			msg.Format(_T("Pb lors de l'allocation de %d élément(s)"),nSize);
    			AfxMessageBox(msg);
    			e->Delete() ;
    			return false;
    		}
    	}
    	return false;
    }
    Tout marche bien, puis un jour le matériel a évolué, et donc en augmentant la taille des tableaux, ca ne marche plus. Une exception est générée et le soft renvois le message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pb lors de l'allocation de 63148800 élément(s)
    Les éléments ici sont des float.

    Les caractéristiques de la config sont :
    - OS : Win XP SP2.
    - DELL T3500 (Xeon 2.93Ghz, 2.87 Go RAM)
    - Le soft est développé sous Visual C++ 6.0 utilisant les MFC.
    Les info du gestionnaires des taches :
    - Mémoire physique (Tot :3012104, Dispo : 1923996, Cahe sys : 491424)
    - Le processus (Util Mem : 592592 Ko, Max : 826256 Ko)
    - Processus : 42, UC utilisé 1% (message blocant), Charge dédiée 996 Mo

    Je ne sais pas quoi donner d'autre comme info avant de tuer le process.

    Notre problème est que nous n'avons aucune explication plausible.

    A votre avis ?
    Merci d'avance.

  2. #2
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Si tu as a besoin de conteneur qui marche avec énormément de contenu, une bonne idée serait d'utiliser STXXL.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Tu essayes d'allouer 63148800 * 4 octets (240Mo) dans la base, et le gestionnaire des tâches indique qu'il ne reste que 1923996 octets (~1,5Mo) disponibles..
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par Klaim Voir le message
    Si tu as a besoin de conteneur qui marche avec énormément de contenu, une bonne idée serait d'utiliser STXXL.
    60 millions d'éléments, c'est gros mais sans plus. Le problème vient du fait qu'il n'y a plus de mémoire. Dans ce cas, new() emets une exception, celle-ci n'est pas catchée, la fonction abort() est appelée et hop, on sort du processus.

    Parce que, figure toi, new() ne renvoie jamais un pointeur NULL, même sur VC6. Et voui. Si tu veux obtenir un pointeur NULL, alors il faut appeler p = new (std::nothrow) Type[n].

    Autre solution, enregistrer un handler qui va permettre d'effectuer une opération de nettoyage mémoire avant de redonner la main à new (qui va alors tenter de réallouer la mémoire, et ré-appeler le handler en cas d'échec; ...))

    Pour ceci, il faut appeler la méthode std::set_new_handler() (voir la doc à ce sujet, je ne me rappelle plus le type du paramètre). En cas d'échec, le handler peut quand même renvoyer false, ce qui va dire à l'opérateur new() de générer une exception.

    Autre solution, changer le WorkingSet du processing (fonction SetProcessWorkingSetSize de l'API Windows). Cette fonction te permet de préciser la taille de la zone mémoire dont laquelle ton programme a besoin pour s'exécuter.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Parce que, figure toi, new() ne renvoie jamais un pointeur NULL, même sur VC6. Et voui.
    Je me permets de te contredire: Je viens de re-tester avec le premier code de ce post, et j'ai droit à un NULL sous VC6 Enterprise Edition.

    Edit: La liste "applies to" de cet article KB fait peur. Le problème du NULL touche également VS 2005 Express...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Il y a aussi le fait que faire un tableau va allouer la mémoire de manière contiguë. Ainsi, tu peux avoir assez de mémoire libre dans le gestionnaire des tâches, l'allocation peut tout de même échouer car la mémoire est fragmentée et il n'y a pas de "trous" assez grand pour stocker tes données.
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  7. #7
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    60 millions d'éléments, c'est gros mais sans plus. Le problème vient du fait qu'il n'y a plus de mémoire. Dans ce cas, new() emets une exception, celle-ci n'est pas catchée, la fonction abort() est appelée et hop, on sort du processus.
    J'ai fait la suggestion de STXXL parceque, à ce que je sache, l'imlpémentation de cette lib va utiliser des fichiers temporaires pour manipuler les données au lieu de tout allouer en mémoire. Ce qui résoudrait, si j'ai bien compris, le problème d'allocation, puisqu'il serait réduit au stricte minimum.

    La contrepartie serait alors, forcément, la vitesse de traitement si on parcours toutes les données.

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par mister3957 Voir le message
    Il y a aussi le fait que faire un tableau va allouer la mémoire de manière contiguë. Ainsi, tu peux avoir assez de mémoire libre dans le gestionnaire des tâches, l'allocation peut tout de même échouer car la mémoire est fragmentée et il n'y a pas de "trous" assez grand pour stocker tes données.
    L'OS peut te dire que la mémoire est contigüe alors qu'en réalité, elle ne l'est pas. Il faut se rappeler que le programme s'exécute dans une zone de mémoire dite virtuelle, qui n'a pas grand chose à voir avec la mémoire physique.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Mais l'espace d'adressage du programme peut quand même être fragmenté au point d'empêcher une allocation.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Mais l'espace d'adressage du programme peut quand même être fragmenté au point d'empêcher une allocation.
    Oui, bien sûr
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  11. #11
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Citation Envoyé par tazer Voir le message
    Bonjour,
    [...]
    A votre avis ?
    Merci d'avance.
    Mon premier réflèxe aurait été de te dire d'augmenter la mémoire de ton PC ... mais je vois qu'il est déjà à 3Go et que tu utilises Visual 6.
    Là, si je suppose que seule ton application tourne et je trouve que le niveau de mémoire disponible est très faible.
    Mon conseil : analyser toutes les allocations de ton programme car je pense que ton programme consomme trop de mémoire. L'échec de l'allocation dans ta fonction n'est probablement que la goutte d'eau qui a fait débordé le vase. Deux pistes :
    -> mauvaises architecture des données aboutissant à une surconsommation mémoire
    -> fuites mémoires aboutissant à diminuer la mémoire disponible.
    Bref, le symptôme que tu décris me ferait plus me diriger vers une analyse plus fine de la gestion des allocations dynamiques dans l'ensemble du programme plutôt que de me focaliser uniquement sur l'échec très localisé de la fonction d'allocation.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 47
    Points : 33
    Points
    33
    Par défaut
    Bonjour et merci à tous de votre riche collaboration,
    En premier je tiens à ajouter un MP que j'ai recu de Pierre Dolez qui dit :
    Bonjour,
    On ne sait pas ce que contient la classe TYPE.
    Si elle contient une cinquantaine, d'éléments, vous n'y arriverez jamais.
    A votre place je ferais une organisation de hachage. Ce qui rendra possible toutes les manipulations ultérieures.
    Cordialement.
    Ceci fait :
    Si tu as a besoin de conteneur qui marche avec énormément de contenu, une bonne idée serait d'utiliser STXXL.
    C'est une piste de dernier recours, car elle impliquerait de modifier pas mal de code et crois moi, il y'en a. Je me la garde sous la main.
    Tu essayes d'allouer 63148800 * 4 octets (240Mo) dans la base, et le gestionnaire des tâches indique qu'il ne reste que 1923996 octets (~1,5Mo) disponibles..
    Je n'ai pas fait attention à ce que j'ai écrit, c'est certainement une faute de retranscription.
    60 millions d'éléments, c'est gros mais sans plus. Le problème vient du fait qu'il n'y a plus de mémoire. Dans ce cas, new() emets une exception, celle-ci n'est pas catchée, la fonction abort() est appelée et hop, on sort du processus.

    Parce que, figure t...
    Dans mon cas j'obtient bien un NULL, d'où l''exception et le message d'erreur.
    Autre solution, changer le WorkingSet du processing (fonction SetProcessWorkingSetSize d...
    Piste intéressante à creuser, pour cela il faut déterminer de combien le processus a besoin en mémoire, à voir si c'est possible. Je me la note.
    Il y a aussi le fait que faire un tableau va allouer la mémoire de manière contiguë. A...
    Connaissez vous un moyen d'identifier la fragmentation de la mémoire.
    -> mauvaises architecture des données aboutissant à une surconsommation mémoire
    -> fuites mémoires aboutissant à diminuer la mémoire disponible.
    C'est la raison qui parle, je pense que nous devons y passer tôt ou tard.
    On ne sait pas ce que contient la classe TYPE.
    Il ne contient, dans ce cas, que des float.

    Malheureusement, depuis, tous le monde est déjà passé sur d'autres projets (jugés plus urgents) et ce problème est refoulé au fond des priorités. Il reste néanmoins critique, à mon sens.

    La solution (rustine) que nous avons mis en place actuellement et de traiter les données sur 2 tableaux de demi taille chacun, et là ca passe, ce qui conforte la cause de fragmentation de la mémoire.

    A quel point c'est crédible ?

  13. #13
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par tazer Voir le message
    C'est une piste de dernier recours, car elle impliquerait de modifier pas mal de code et crois moi, il y'en a. Je me la garde sous la main.
    Ouh ! bug d'architecture ! Vilain vilain vilain !

    La façon dont les données sont stockées et censée être un détail d'implémentation, comme tu le vois maintenant. Il faut encapsuler tout ça (peut être dans une classe "collection" ou "dictionnaire", ou autre chose, selon la sémantique intrinsèque des données elles-même.

    Citation Envoyé par tazer Voir le message
    Dans mon cas j'obtient bien un NULL, d'où l''exception et le message d'erreur.
    Comportement pré-standard donc. Vous n'avez pas moyen de passer à une autre version de Visual ? Les dernières versions (2005, 2008 et 2010) sont gratuites dans leur déclinaison "Express Edition". Il n'y a pas tout, certes, mais si vous ne faites pas de MFC, ça ne devrait pas poser de problème. Un très grand nombre de bugs ont été corrigés. Le support du standard est maintenant tout à fait correct, mis à part certains points très particuliers (comme les règles d'instanciation des templates).

    Citation Envoyé par tazer Voir le message
    Piste intéressante à creuser, pour cela il faut déterminer de combien le processus a besoin en mémoire, à voir si c'est possible. Je me la note.
    Si vous manipulez énormément de données, c'est peut-être une solution. Ou un nouveau problème

    Citation Envoyé par tazer Voir le message
    Connaissez vous un moyen d'identifier la fragmentation de la mémoire.
    Non, hélas. Tu peux maintenir une map (en surchargeant new et delete pour effectuer la mise à jour de la map en question), et voir ce que ça donne.

    Citation Envoyé par tazer Voir le message
    Malheureusement, depuis, tous le monde est déjà passé sur d'autres projets (jugés plus urgents) et ce problème est refoulé au fond des priorités. Il reste néanmoins critique, à mon sens.

    La solution (rustine) que nous avons mis en place actuellement et de traiter les données sur 2 tableaux de demi taille chacun, et là ca passe, ce qui conforte la cause de fragmentation de la mémoire.
    Les plantages systématiques sont en low priority ?

    Ca c'est fun et courageux

    Citation Envoyé par tazer Voir le message
    A quel point c'est crédible ?
    C'est tout à fait crédible. Mon blabla précédent ne visait pas à écarter cette cause, mais juste à dire qu'elle ne se produisait pas si souvent que ça. Quoi qu'il en soit, elle se produit quand même lorsqu'on gère des tailles mémoire importantes.

    Il y a en outre une autre chose qui demande à être vérifiée : le nombre réel d'éléments alloués. Tu utilises un std::vector<>, et sa taille (obtenue par la méthode size()) n'est pas liée à l'espace mémoire qui a été réservé (obtenu pas la méthode capacity()). C'est peut-être pour ça que ça marche avec deux vecteurs plus petits : la taille allouée peut être en fait très inférieure à la taille d'un seul vecteur contenant tous les éléments. L'algorithme qui préside à l'extension d'un vecteur est facile à comprendre, mais les interactions qu'il entraîne peuvent être complexes à prévoir. L'utilisation de la méthode reserve() permets d'avoir un contrôle plus fin sur ce qui se passe.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 47
    Points : 33
    Points
    33
    Par défaut
    Ouh ! bug d'architecture ! Vilain vilain vilain ! ...
    Le changement du code "présumé" coupable n'est pas compliqué an tant que tel ainsi que les problèmes de compil qui en résulterons.
    S'assurer que l'on n'a rien cassé et que tout marche comme avant (même les soft liés à des matériels dont on ne dispose plus) c'est ce qui fait peur. D'autant plus que le code en question date du début des années 2000 voir 90 (voir même 80) et qu'une multitude d'applications ont été construites dessus.

    Comportement pré-standard ... Vous n'avez pas moy...
    C'est en cours sur les nouveaux développements pour les visual 2008, 2010. Par contre nos dév sont très liés aux MFC, déjà en gardant les MFC, il a fallu du temps. S'en passer n'est pas productif.

    En résumé, et là on sort un peu du sujet, nous sommes amené à manipuler des données de taille astronomique, mais nous restons quand même une entité à taille humaine.

  15. #15
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par tazer Voir le message
    Le changement du code "présumé" coupable n'est pas compliqué an tant que tel ainsi que les problèmes de compil qui en résulterons.
    S'assurer que l'on n'a rien cassé et que tout marche comme avant (même les soft liés à des matériels dont on ne dispose plus) c'est ce qui fait peur. D'autant plus que le code en question date du début des années 2000 voir 90 (voir même 80) et qu'une multitude d'applications ont été construites dessus.
    Là, je n'ai qu'une solution : la relecture de Refactoring de M. Fowler Et du test unitaire. Beaucoup de test unitaire. Avant de commencer le refactor.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

Discussions similaires

  1. Usage de mémoire pour une base en grande taille
    Par iamnot dans le forum Firebird
    Réponses: 2
    Dernier message: 13/09/2011, 16h00
  2. Débutant, problème tableaux trop grands, mémoire
    Par Sabrina0021 dans le forum C
    Réponses: 2
    Dernier message: 24/07/2011, 00h26
  3. Réponses: 22
    Dernier message: 20/01/2009, 13h57
  4. Souci de mémoire : tableaux trop grands
    Par driss80 dans le forum Fortran
    Réponses: 8
    Dernier message: 13/03/2008, 14h42

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