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:
Son .h
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 .def
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 #include <stdlib.h> #include <stdio.h> #define DllExport _declspec(dllexport) DllExport int 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 LIBRARY getDataToProcessDLL DESCRIPTION 'bleah' EXPORTS getDataToProcess
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(dllimport) DllImport extern int getDataToProcess(); int main(void) { if(getDataToProcess() < 0){ printf("IL Y A UNE ERREUR \n"); return(-1); } return(0); }
Partager