Probleme de Memoire - C++ - Programmation
Marsh Posté le 01-08-2006 à 09:19:17
Juste une idée comme ça, le tableau de pointeur sur le début des lignes est vraiment nécessaire?
Marsh Posté le 01-08-2006 à 13:30:53
le destructeur est vide et ce n'est meme pas safe-assignable, meme conseil que dans ton autre topic, n'utilise pas ce code !
Marsh Posté le 01-08-2006 à 15:02:44
Dans la ligne
M=new T[dimR*dimC*sizeof(T)];
quelqu'un m'explique à quoi sert le sizeof ? :s
on aurrait M= (T*) malloc( dimR*dimC*sizeof(T) );
je comprendrais. mais il n'y a pas un peu sizeof(T) fois trop de mémoire utilisée?
Marsh Posté le 01-08-2006 à 15:12:19
mh ... surement, mais aparement, si ya un problème de mémoire (à priori c'est le problème qu'il pose... il tient peut être à coder absolument avec ce code !), ca doit etre de la qu'il vient ! à plus forte raison si tu utilises le template avec une classe volumineuse ^^ (déja avec un int ca en prend 4 fois trop...Alors avec une classe bien pleine...)
Marsh Posté le 01-08-2006 à 15:14:08
Question à part, je me suis tjrs servi de sizeof() sans m'en soucier, mais... ca retourne la taille en nombre d'octets ? ou de bits ?
Marsh Posté le 01-08-2006 à 15:18:02
icareo a écrit : Question à part, je me suis tjrs servi de sizeof() sans m'en soucier, mais... ca retourne la taille en nombre d'octets ? ou de bits ? |
ca retourne la taille en char, et le plus souvent 1 char = 1 octet
Citation : mh ... surement, mais aparement, si ya un problème de mémoire (à priori c'est le problème qu'il pose... il tient peut être à coder absolument avec ce code !) |
il peut y avoir d'autre probleme, trop de bug sont à prevoir, regardes bien le code il y en a partout (genre la methode clear qui assigne 0 qu'a la premiere ligne ou la copie qui peut tout faire planter en plus d'engendrer une fuite)
Marsh Posté le 01-08-2006 à 15:23:11
lol...autre pb aussi ^^ l'operateur de copie... c'est moi ou le affecte à la copie le meme pointeur qu'à l'original
mh..Bref. à la reflexion, je suis d'accord avec skelter, utilises un des nombreux codes tout faits... ou révises tout ton code :s
Marsh Posté le 01-08-2006 à 15:43:50
j ai oublié de vous dire que j ai enlevé le sizeof() et ca ameliore un peu le temps d execution.
j ai fait beaucoup de calcul en utilisant ce code. il y a pas une méthode pour améliorer la perfermance de ce code au lieu d'utiliser un autre code?
en diminuant la memoire utilisée et en diminuant le temps d éxecution?
est ce q il ya de probleme avec ce code qui rempli une matrice par une colonne de nombre f de la matrice m??
Code :
|
merci
Marsh Posté le 01-08-2006 à 16:04:30
pourquoi tu ne veux pas utiliser une vria lib faite pour ca ? c'est quand meme la meilleur des solutions ??
Marsh Posté le 01-08-2006 à 16:29:48
je suis d accord que c est mieux d'utiliser une lib faite pour ce genre de calcul mais ca fait 4 semaines que je travaille sur ce code et il me donne les rédultats que j attend mais comme je vous ai dit le probleme de memoire et le temps d éxecution qui me gene.
Marsh Posté le 02-08-2006 à 00:58:27
Et vu comment tu maîtrises le langage, tu vas en passer 8 autres à débuguer ton code sans jamais avoir la moindre chance d'arriver au niveau de performance de codes écrits par des mathématiciens professionnels et optimisés pendant des années.
Regarde plutôt ça: http://www.boost.org/libs/numeric/ublas/doc/index.htm
conseils d'utilisation:
http://www.crystalclearsoftware.co [...] tive_UBLAS
ou ça: http://lapackpp.sourceforge.net/
Marsh Posté le 02-08-2006 à 02:22:58
ReplyMarsh Posté le 02-08-2006 à 10:53:12
ReplyMarsh Posté le 02-08-2006 à 13:43:54
Bon, pour repondre a la question initiale :
Il n'y y a pas de solutions a ton probleme de memoire. Si tu ne manipules pas des matrices creuses, tu es condamne a te trimballer ces structures. Ou alors, tu peux faire des analyses en composantes principales pour diminuer la dimension, mais c'est une compression destructive.
En revanche, pour les operations sur ces matrices, tu peux facilement derouler les boucles, mais comme on te l'as conseille a de multiples reprises plus haut : utilises une vraie bibliotheque, genre Blitz .
Marsh Posté le 02-08-2006 à 18:01:17
Ton lien parle de bits, pas d'octets..
1 char = 1 octet, quelque soit la taille en bits de cet octet.
Marsh Posté le 02-08-2006 à 18:22:56
oseam a écrit : Ton lien parle de bits, pas d'octets.. |
1 octet = 8 bits comme son nom l'indique, en francais on dit plutot 1 char = 1 multiplet ou 1 codet
Marsh Posté le 03-08-2006 à 00:10:13
SBAM a écrit : Bon, pour repondre a la question initiale : |
Je la cherchais aussi celle-là. Blitz++
Marsh Posté le 03-08-2006 à 00:19:30
Citation : Sujet : Probleme de Memoire |
mange du poisson !
Marsh Posté le 03-08-2006 à 08:35:18
Reply
Marsh Posté le 01-08-2006 à 08:59:44
salut,
j'utilise une classe faite en C++ pour les calculs matriciels de grand taille la classe est le suivant:
c'est le début de la classe Matrix:
quand je l utilise pour faire des calculs sur des matrice de grndes tailles il devient trés gormand en mémoire et tres lent. est ce vous avez des idées comment pour mieux gerer le mémoire.
comme pour e destructeur il me donne toujours des exeptions pourcela j ai fait une fonction destroy() pour la désallocation de mémoire.