|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
Sujet : probleme de gestion de memoire ?????? [ Algorithme / Maths ] (MBALHOUSSE)
Informations & options pour cette discussion
|
jeudi 17 juillet 2008 à 15:25:04 |
probleme de gestion de memoire ??????

MBALHOUSSE
|
Bonjour, je sais pas si quelqu'un a deja eu ce probleme, je m'explique:
dans mon travail je developpe des bibliotheques numeriques, un projet lourd, avec trop de variable que j'utilise comme des arguments dans mes fonctions, la plupart des fonctions retourne des tableaux de 60 elements, genre: double * fonction(types arguments) { static double tab[60]; ... ... return tab; } chaque tableau est utilisé pour calculer un autre et ainsi de suite jusqu'au resultat final, mon probleme c'est que au bout d'un moment l'ordinateur met trop de temps pour calculer le resultat. je sais pas pourquoi? Merci
|
|
|
|
jeudi 17 juillet 2008 à 17:35:35 |
Re : probleme de gestion de memoire ??????

rt15
|
Salut,
Bin ça à l'air pas trop moche. Quand on déclare des variables en "static", soit une zone leur est réservée dans le .exe, soit une zone leur est réservée dans le .exe tel qu'il est chargé en mémoire (section plus grande en mémoire que dans le fichier).
Bref, quand ton processus démarre, toutes les allocations sont faîtes, ce n'est pas comme si tu avais du malloc de partout.
Ta fonction renvoie un pointeur, autrement dit 32bits, ce qui est idéal.
Concernant les arguments, il faut aussi essayer au maximum de faire passer des pointeurs si possible (C'est à dire si tu ne les modifie pas dans la fonction appelée, ou si le fait de les modifier n'a pas d'importance). Par exemple, si tu as pleins d'arguments, tu peux essayer de les mettre dans une struct, et de passer à tes fonctions un pointeur sur cette struct. Cela éviter de recopier les arguments passés par valeur un par un.
void fonction(int a, int b)
typedef struct { int a; int b; } point;
void fonction(point* p)
La solution verte est censé être plus performante : on empile 4 octets au lieu de 8. Mais si on modifie les champs a et b de p dans la fonction, il sont aussi modifiés dans l'appelant.
Une solution alternative pour l'allocation, mais théoriquement moins performante (Encore qu'il faut se méfier avec les théories), serait d'allouer les tableaux dans les appelantes, dans la pile.
double * fonction(types arguments, double* tab) { return tab; }
et l'appel :
double tab[60]; fonction(arguments, tab);
Le renvoie du pointeur ne te sert plus qu'à enchaîner les appels plus facilement : fonction2(arguemnts2, fonction1(arguments1, tab));
Le fait d'utiliser cette méthode peut te permettre éventuellement de réemployer le même tableau sur plusieurs appels : double tab[60]; fonction(arguments1, tab); fonction(arguments2, tab);
Les processeurs aiment bien relire une mémoire qu'il ont lus récemment.
Concernant les optimisation en calcul numérique, tu peux essayer de paralléliser certains de tes calculs, via les possibilités offertes par les processeurs modernes. Outre la possibilité de thread simultanés sur un multi-pro, la plupart des processeurs actuels intègre MMX et certains des SSEs qui permettent d'appliquer la même opération à plusieurs données. Mais ça demande du boulot d'exploiter cette possibilité, et faut que les calculs s'y prêtes.
|
|
|
|
jeudi 17 juillet 2008 à 23:31:43 |
Re : probleme de gestion de memoire ??????

Neo_Fr
|
"Le fait d'utiliser cette méthode peut te permettre éventuellement de réemployer le même tableau sur plusieurs appels :
double tab[60];
fonction(arguments1, tab);
fonction(arguments2, tab); "
Il me semble que si le tableau est declarer en static c'est deja le meme qui sera reutiliser a chaque appelle de la fonction non?
Ex:
void Test1(void)
{
static int i = 4;
if(!i--) { printf("Test1(): i = 0\n"); i = 4; }
}
void Test2(void)
{
int i = 4;
if(!i--) { printf("Test2(): i = 0\n"); i = 4; }
}
int main(void)
{
int i;
for(i=16; i; i--) { Test1(); Test2(); }
return 0;
}
Neo_Fr
|
|
|
|
vendredi 18 juillet 2008 à 16:35:14 |
Re : probleme de gestion de memoire ??????

rt15
|
Bah vi, mais on en a un par fonction.
double * fonction1(types arguments) { static double tab[60]; }
double * fonction2(types arguments) { static double tab[60]; }
Alors que si on le passe en argument, on en a qu'un, déclaré dans l'appelante.
void appelante() { double tab[60]; fonction1(arguments, tab); fonction2(arguments, tab); }
Si il y a beaucoup de fonction dans le premier cas, la consommation mémoire = nb fonction * 60 * 8 octets. Dans le deuxième, la consommation est indépendant du nombre de fonctions vu que c'est toujours le même qui est réutilisé (Mais ça peut être un problème : tout dépend de l'algo).
La consommation mémoire n'est pas franchement le problème ici, mais comme je l'ai dit plus haut, il est souvent préférable de lire et écrire toujours la même chose, de manière à rester dans les caches proco (L1, L2....)
M'enfin c'est vrai que 60 * 8 * n, ça reste pas grand chose.
|
|
|
Cette discussion est classé dans : probleme, gestion, trop, memoire, arguments
Répondre à ce message
Sujets en rapport avec ce message
Probleme de gestion de fichier et gestion de l ehrue en C [ par croft ]
Mr.croftG un probleme avec un fichier texte contenant un mot sur chaque ligne .Il me faudrait un code qui pourrrait me ressortir aleatoirment un mot d
probleme de memoire [ par trif ]
salut, g un gros probleme avec une appli:quand je redimensionne ma fenetre, ca marche pendant un moment mais je bouffe enormement de memoire, et puis
Probleme C++Builder, gestion de boutons etc. [ par FXL ]
Bonjour a tous, je vous écris car j'ai un projet de licence a réaliser qui consiste a faire une interface graphique, créer un petit logiciel simple et
gestion clavier SDL trop rapide !!! [ par _Jonathan ]
bonjour a tousj'ai créé un programme avec sdl/opengl mais la gestion du clavier(sdl) est beaucoup tro rapide.j'ai pourtant essayé avec SDL_KEYUP, mais
gestion de fichier en C++ [ par croftlou ]
Bonjour je suis debutant en C++, je desire faire un petit projet en C+++, pour gere des des fichiers en lecture et en ecriture.Pour cela ej voudrai cr
Accroissement continu de la memoire utilisée [ par Ptlpn ]
Salut,Alors la , j ai un gros probleme : j arrive a la fin de mon projet, mais probleme, hier soir je faisait qe planter. J ai donc lancé le gestionna
Gestion Memoire Windows [ par victorcoasne ]
Bonjour, Je fais un programme qui mange énormément en ressources (+ de 5Mo au départ) et qui augmente un peu. Je réduis la fenêtre et la restaure et
programmation de probleme de gestion d'hotel avec liste en C [ par mohcene ]
Bonjour a tout le monde, vola j'ai un probleme de programmation de probleme de gestion d'hotel avec liste en C, les contraints un client peut réserve
Recupération de la taille de la memoire graphique [ par fatmamed ]
Bonjour,je developpe une application en C++ (VC++ 6.0 et Qt )qui utilise OpenGl et j'ai eu un probleme avec une carte graphique de type Matrox (je ne
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
|