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

MFC Discussion :

Problème mémoire en Debug/Release sous VC++6


Sujet :

MFC

  1. #1
    pe
    pe est déconnecté
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Problème mémoire en Debug/Release sous VC++6
    Bonjour tout le monde.
    J'ai un problème d'allocation de mémoire en mode release. J'appelle une DLL qui alloue de la mémoire et effectue un traitement. Mais l'allocation envoie tout dans le swap et rien dans la ram (aussi bien pour 40mo que pour 2Go). Pourtant il y a 2.5Go de ram de libre... Ce qui est plutôt embêtant car le traitement sur l'image dure quelques minutes si toute l'image se trouve en ram et donc dure des heures voire des jours en swap...

    J'ai donc réécrit un programme à côté qui effectue la même allocation (et que ça) et j'ai le même problème.
    Si quelqu'un pouvait m'aider ou me mettre sur la voie, ce serait super et désolé pour les bêtes de la programmation si cela vous paraît stupide comme question.

    En mode debug il envoie bien en ram mais le swap augmente aussi de la même quantité. Est-ce normal ?

    Voici le code de la DLL:
    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
     
    #include "getDataToProcess.h"
     
    DllExport int getDataToProcess()
    {
    	printf("je vais allouer\n");
    	long *temp = new long[100000000];
    	if(temp == NULL){
    		printf("erreur\n"); 
    		return(-1); 
    	}
    	else{
    		printf("j'ai bien alloue\n");
    		system("pause");
    		delete[] temp;
    		printf("j'ai desalloue\n");
    	}
    	return(0);
    }
    Son .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #include <stdlib.h>
    #include <stdio.h>
    #define DllExport _declspec&#40;dllexport&#41;
    DllExport int getDataToProcess&#40;&#41;;
    Son .def
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    LIBRARY			getDataToProcessDLL
    DESCRIPTION		'bleah'
     
    EXPORTS
    	getDataToProcess
    Et le code de l'exe qui appelle la DLL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    //#include <wchar.h>
    #include <stdio.h>
    #define DllImport _declspec&#40;dllimport&#41;
    DllImport extern int getDataToProcess&#40;&#41;;
     
    int main&#40;void&#41;
    &#123;
    	if&#40;getDataToProcess&#40;&#41; < 0&#41;&#123;
    		printf&#40;"IL Y A UNE ERREUR \n"&#41;;
    		return&#40;-1&#41;;
    	&#125;
    	return&#40;0&#41;;
    &#125;

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    Pour des grosses allocations comme ca, il faut plutot utiliser les fonctions de l'API Win32, c'est beaucoup plus efficace.

    Voir VirtualAlloc, LocalAlloc, HeapAlloc, etc ...

  3. #3
    pe
    pe est déconnecté
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci de ta réponse.

    Malheureusement, je ne dois pas utiliser l'APO Win 32 car on doit garder un code portable.
    Toutes les autres parties du programme (dll qui lit des paramètres, dll qui lit les images et récupère les infos, dll qui écrit des images ainsi que le traitement) sont écrits en C afin de pouvoir l'utiliser sous linux si on en a besoin.

  4. #4
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 749
    Points : 10 666
    Points
    10 666
    Billets dans le blog
    3
    Par défaut
    Comment sais-tu qu'il envoie ça en swap ?
    Quel OS ?

Discussions similaires

  1. Problème de mémoire avec Delphi-5 sous 64 bits
    Par Gilbert Geyer dans le forum Langage
    Réponses: 9
    Dernier message: 26/03/2012, 13h41
  2. Réponses: 17
    Dernier message: 12/08/2010, 16h30
  3. Problème d'exécution en release mais pas en debug (2)
    Par animageo dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/11/2007, 15h22
  4. Problème passage de debug à release
    Par beni46 dans le forum Physique
    Réponses: 1
    Dernier message: 20/08/2007, 13h39
  5. Problème de mémoire debug/release
    Par ben_popcorn dans le forum C++
    Réponses: 9
    Dernier message: 23/11/2006, 12h52

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