Programmation » [C++] Utilisation de la mémoire
[C++] Utilisation de la mémoire
Publié le 05/04/2006 @ 14:01:13,
Par blietaerAlors ça pour un sujet con, c'est bien un sujet de débutant en C.
Si bien que...je ne m'en souviens plus.
Je voudrais faire une petite application qui va gérer des classes (2-3) utilisées par 250 objets chacunes. Elle ne contiendrons pas spécialement des données lourdes (qques petites array au mieux). Il s'agira ensuite de les faire inter-réagir dans une optique de tri pour optimiser un rangement. (style placement dans un avion, tables de mariages,..).
ref de nombreuses manipulations sur ces nombreuses classes.
Si je ne fais rien je suppose qu'elle vont être "bêtement" allouées en mémoire et trimballées....
Le fait d'utiliser la famille "malloc()" va-t-il stabiliser, nettoyer, alleger, accélerer mon soft?
A quelle moment faire ces allocation?
ds le constructeur?
un objet s'auto-alloc?
merci pour vos éventuels rafraichissements.
ceci sent bon ?
// Create an array containing n MyClass objects using the default constructor:
MyClass *dynamicArray = new MyClass[n];
// Access it:
dynamicArray[n - 1].Method();
// Get rid of the array:
delete[] dynamicArray;
et un bon editeur/IDE C\C++ gratos sous XP ?
Dernière édition: 05/04/2006 @ 14:10:11
Si bien que...je ne m'en souviens plus.
Je voudrais faire une petite application qui va gérer des classes (2-3) utilisées par 250 objets chacunes. Elle ne contiendrons pas spécialement des données lourdes (qques petites array au mieux). Il s'agira ensuite de les faire inter-réagir dans une optique de tri pour optimiser un rangement. (style placement dans un avion, tables de mariages,..).
ref de nombreuses manipulations sur ces nombreuses classes.
Si je ne fais rien je suppose qu'elle vont être "bêtement" allouées en mémoire et trimballées....
Le fait d'utiliser la famille "malloc()" va-t-il stabiliser, nettoyer, alleger, accélerer mon soft?
A quelle moment faire ces allocation?
ds le constructeur?
un objet s'auto-alloc?
merci pour vos éventuels rafraichissements.
ceci sent bon ?
// Create an array containing n MyClass objects using the default constructor:
MyClass *dynamicArray = new MyClass[n];
// Access it:
dynamicArray[n - 1].Method();
// Get rid of the array:
delete[] dynamicArray;
et un bon editeur/IDE C\C++ gratos sous XP ?
Dernière édition: 05/04/2006 @ 14:10:11
Et au besoin s'arrêter.
[C++] Utilisation de la mémoire
Publié le 05/04/2006 @ 14:31:24,
Par zionJ'ai pas tout suivi déjà ...
Je suis pas expert en C++, mais ca va réellement créer n objets ta ligne miracle en appelant le constructeur quivabien? En pascal t'aurais juste un array de pointeurs vers des objets mais aucun d'initialisé. Un amateur C++ pour confirmer?
Sinon, pourquoi tu parles de te compliquer la tâche à vouloir réduire l'utilisation mémoire d'une application simple qui n'existe pas encore? Tu pourrais tout d'abord partir d'une base simple et l'améliorer, histoire de pas te tuer à la tâche sur un truc bancal
J'ai pas non plus tout compris à ce que tu voulais, mais si ta mémoire est allouée dans ton objet, tu peux ne l'allouer dans l'objet qu'à sa première utilisation. Mais c'est pas un boulot difficile à modifier si tu as bien codé au début sur la version "simple"
Je suis pas expert en C++, mais ca va réellement créer n objets ta ligne miracle en appelant le constructeur quivabien? En pascal t'aurais juste un array de pointeurs vers des objets mais aucun d'initialisé. Un amateur C++ pour confirmer?
Sinon, pourquoi tu parles de te compliquer la tâche à vouloir réduire l'utilisation mémoire d'une application simple qui n'existe pas encore? Tu pourrais tout d'abord partir d'une base simple et l'améliorer, histoire de pas te tuer à la tâche sur un truc bancal
J'ai pas non plus tout compris à ce que tu voulais, mais si ta mémoire est allouée dans ton objet, tu peux ne l'allouer dans l'objet qu'à sa première utilisation. Mais c'est pas un boulot difficile à modifier si tu as bien codé au début sur la version "simple"
Je suis le Roy
[C++] Utilisation de la mémoire
Publié le 05/04/2006 @ 16:39:32,
Par AltarUtiliser malloc en c++ est de l'hérésie pure et simple... malloc/free était la seule façon d'alloué et de désalloué de la mémoire en c (pas vraiment mais soit) et est resté en c++ pour des raison de compatibilité ascendente et c'est tout. En c++ tu utilises new et delete et pas autre chose si tu comptes faire du c++ correct (si tu veux faire le cochon libre à toi :D) .
Et pour répondre à ta question : class *pointer= new class[n]; va effectivement créer un array d'objets (et ils seront bien alloués) contigus en mémoire et placer l'addresse du premier objet dans pointer.
Edit : Pour un bon éditeur c++, il y a visual studio 2005 qui est gratuit pour les étudiants. Sinon tu peux toujours essayer dev c++ qui utilise la version portée de g++ sur windows (et ce n'est pas franchement une réussite).
Dernière édition: 05/04/2006 @ 16:41:56
Et pour répondre à ta question : class *pointer= new class[n]; va effectivement créer un array d'objets (et ils seront bien alloués) contigus en mémoire et placer l'addresse du premier objet dans pointer.
Edit : Pour un bon éditeur c++, il y a visual studio 2005 qui est gratuit pour les étudiants. Sinon tu peux toujours essayer dev c++ qui utilise la version portée de g++ sur windows (et ce n'est pas franchement une réussite).
Dernière édition: 05/04/2006 @ 16:41:56
[C++] Utilisation de la mémoire
Publié le 05/04/2006 @ 16:44:03,
Par zionEt pour répondre à ta question : class *pointer= new class[n]; va effectivement créer un array d'objets (et ils seront bien alloués) contigus en mémoire et placer l'addresse du premier objet dans pointer.
Rah benh merde, ca fait trop longtemps que j'en ai plus fait...
Je vais être programmeur pascal jusqu'à la fin de mes jours
Je suis le Roy
[C++] Utilisation de la mémoire
Publié le 05/04/2006 @ 16:54:45,
Par AltarBlieater pour répondre ta question, si tu veux éviter que tes objets soient dupliqués inutilement, utilise des pointeurs et des références. Attention après à ne pas effacer un objet qui serait pointés par un autre pointeur que tu ne remettrais pas à NULL ou à ne pas dupbliquer un objet sans constructeur de copie définit qui aurait des pointeurs vers d'autres structures (les pointeurs seront dupliqués mais pas les objets pointés) si celle-ci doivent aussi être dédoublés.
Sinon bon amusement et bon courage c'est souvent pénible de jouer avec des pointeurs
Sinon bon amusement et bon courage c'est souvent pénible de jouer avec des pointeurs
[C++] Utilisation de la mémoire
Publié le 05/04/2006 @ 17:00:06,
Par zionCe qui est beaucoup plus simple à utiliser en Pascal, il duplique jamais sauf si on le demande, et c'est pas si simple
Je suis le Roy
[C++] Utilisation de la mémoire
Publié le 05/04/2006 @ 17:02:52,
Par AltarPas convaincu ça prend 2 minutes à définir un constructeur de copie
[C++] Utilisation de la mémoire
Publié le 05/04/2006 @ 17:05:01,
Par zionEn Pascal... non
Si tu fais une assignation simple en pascal, il copie le pointeur vers l'objet. Si tu veux un deuxième objet, tu dois en créer un deuxième explicitement puis avoir prévu toi même une fonction pour assigner ses membres. (Il y a quelques méthodes Assign sur certaines classes, mais c'est rarissime).
Si tu fais une assignation simple en pascal, il copie le pointeur vers l'objet. Si tu veux un deuxième objet, tu dois en créer un deuxième explicitement puis avoir prévu toi même une fonction pour assigner ses membres. (Il y a quelques méthodes Assign sur certaines classes, mais c'est rarissime).
Je suis le Roy
[C++] Utilisation de la mémoire
Publié le 05/04/2006 @ 17:12:51,
Par Altarouch... et bien chaque langage à ses avantages et ses défauts. Le plus important c'est d'être à l'aise avec.
[C++] Utilisation de la mémoire
Publié le 07/04/2006 @ 10:13:57,
Par blietaermerci pour ces réponses, un bon vieux new et delete pour toute mon array me suffira pour le moment.
Tant que j'y suis, pour ceux qu is'y connaissent mysql par le C++:
j'arrive très bien à afficher les données d'une de mes tables, mais disons mtn que je veuille récupérer une valeur ds une variable, par exemple sous forme d'entier, comment faire?
int mavariable_int;
mavariable_int = (int *)row[3];
ben ça marche pas...
Dernière édition: 07/04/2006 @ 12:59:12
Tant que j'y suis, pour ceux qu is'y connaissent mysql par le C++:
MYSQL_ROW row;
unsigned int num_fields;
unsigned int i;
num_fields = mysql_num_fields(result);
while ((row = mysql_fetch_row(result)))
{
unsigned long *lengths;
lengths = mysql_fetch_lengths(result);
for(i = 0; i < num_fields; i++)
{
printf("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL");
}
printf("\n");
}
unsigned int num_fields;
unsigned int i;
num_fields = mysql_num_fields(result);
while ((row = mysql_fetch_row(result)))
{
unsigned long *lengths;
lengths = mysql_fetch_lengths(result);
for(i = 0; i < num_fields; i++)
{
printf("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL");
}
printf("\n");
}
j'arrive très bien à afficher les données d'une de mes tables, mais disons mtn que je veuille récupérer une valeur ds une variable, par exemple sous forme d'entier, comment faire?
int mavariable_int;
mavariable_int = (int *)row[3];
ben ça marche pas...
Dernière édition: 07/04/2006 @ 12:59:12
Et au besoin s'arrêter.
[C++] Utilisation de la mémoire
Publié le 07/04/2006 @ 13:01:07,
Par zionQuand tu fais un fetch row, tout les fields sont convertis en string, sauf si tu utilises le protocole binaire de MySQL. Donc tu dois convertir explicitement ton string en entier en C++.
Je suis le Roy
[C++] Utilisation de la mémoire
Publié le 07/04/2006 @ 14:40:15,
Par blietaeravec un strtoi() bien lourd?
Et au besoin s'arrêter.
[C++] Utilisation de la mémoire
Publié le 07/04/2006 @ 14:55:27,
Par zionBenh oui. Tu castes un string en int comme un bourrin et t'espères que ca fasse quoi?
Ce sont tous des strings, sauf si tu utilises le nouveau protocole binaire de MySQL
Ce sont tous des strings, sauf si tu utilises le nouveau protocole binaire de MySQL
Je suis le Roy
[C++] Utilisation de la mémoire
Publié le 07/04/2006 @ 21:30:08,
Par AltarQuel idée d'utiliser MySQL aussi
Par contre où est-ce qu'on peut trouver une api et de la documentation pour ce nouveau protocol ?
Par contre où est-ce qu'on peut trouver une api et de la documentation pour ce nouveau protocol ?
[C++] Utilisation de la mémoire
Publié le 07/04/2006 @ 21:36:42,
Par zionOui, farpaitement:
http://dev.mysql.com/doc/refman/5.0/fr/c-api-prepared-statements.html
http://dev.mysql.com/doc/refman/5.0/fr/news-4-1-x.html
...
http://dev.mysql.com/doc/refman/5.0/fr/c-api-prepared-statements.html
http://dev.mysql.com/doc/refman/5.0/fr/news-4-1-x.html
...
Je suis le Roy
[C++] Utilisation de la mémoire
Publié le 10/04/2006 @ 13:26:56,
Par blietaerca pue le troll mais je me lance...
Que prendre d'autre que MySQL pour la DB?
Que prendre d'autre que MySQL pour la DB?
Et au besoin s'arrêter.
[C++] Utilisation de la mémoire
Publié le 10/04/2006 @ 13:34:53,
Par zionQui a dit que MySQL était mal?
C'est pas parce que la fonction que tu utilises ne fonctionne pas comme tu le pensais que tu dois changer de DB dis donc
Sinon y en a pleins... Postgres, Firebird, Oracle , MSSQL, ...
C'est pas parce que la fonction que tu utilises ne fonctionne pas comme tu le pensais que tu dois changer de DB dis donc
Sinon y en a pleins... Postgres, Firebird, Oracle , MSSQL, ...
Je suis le Roy
[C++] Utilisation de la mémoire
Publié le 10/04/2006 @ 13:49:21,
Par blietaerQui a dit que MySQL était mal?
Donc Altar deux messages au dessus...
Et au besoin s'arrêter.
[C++] Utilisation de la mémoire
Publié le 10/04/2006 @ 13:51:06,
Par zionEt tu te laisses intimider par si peu?
Homme de peu de foie foi
Dernière édition: 10/04/2006 @ 13:51:17
Homme de peu de foie foi
Dernière édition: 10/04/2006 @ 13:51:17
Je suis le Roy
[C++] Utilisation de la mémoire
Publié le 10/04/2006 @ 14:15:04,
Par gizmoMySQL c'est mal
Concept vivant.