PROBLEME POINTEURS

zeloveur Messages postés 2 Date d'inscription lundi 4 mars 2002 Statut Membre Dernière intervention 5 mars 2002 - 4 mars 2002 à 09:23
cs_pdl Messages postés 134 Date d'inscription mardi 20 novembre 2001 Statut Membre Dernière intervention 16 juin 2008 - 6 mars 2002 à 07:24
char * saisirChaine()
{
int i=0;
char *chn;
chn=(char *)malloc(sizeof(char));
do
{
chn[i]=getchar();
chn=(char *)realloc(chn,(++i+1)*sizeof(char));
}
while(chn[i-1]!=10);
chn[i-1]=0;
return &chn[0];
}

donc je voulais savoir si à chaque fois que je réaloue de mémoire, si ça ne prend pas trop de temps, si oui dites moi comment améliorer ce source

3 réponses

cs_pdl Messages postés 134 Date d'inscription mardi 20 novembre 2001 Statut Membre Dernière intervention 16 juin 2008
5 mars 2002 à 07:36
Ne te tracasse pas de trop pour le temps que cela prends car attendre un caractère est quelque chose de très lent !
0
zeloveur Messages postés 2 Date d'inscription lundi 4 mars 2002 Statut Membre Dernière intervention 5 mars 2002
5 mars 2002 à 16:55
Oui mais sur un programme plus long, gérant plus de données et ne concernant pas la saisie de caractère, est-ce qu'il y a une meilleur sollution pour l'allocation de mémoire, faut -il mieux allouer un gros bloc d'un coup, ou à chaque fois que c'est nécessaire?
0
cs_pdl Messages postés 134 Date d'inscription mardi 20 novembre 2001 Statut Membre Dernière intervention 16 juin 2008
6 mars 2002 à 07:24
Du point de vue performance pure, il est plus performant de faire une seule allocation d'un gros bloc que de X fois une allocation pour arriver au même résultat. Maintenant au niveau de la gestion de mémoire, une allocation au fur et à mesure est évidement mieux. la question revient dès lors à se demander qu'elle est la taille maximale qu'aura ta chaîne de caractères et le nombre de fois que tu en auras besoin en même temps (nombre d'instance) si ta réponse est moins de 4000 caractères et une fois, alors vas-y d'un coup ! Saches que VB et Access ne se soucie pas de trop de la taille allouée et ne se gène pas pour réserver d'un coup de grand bloc de mémoire.

Enfin, si tu ne veux pas trop te soucier de ce problème, tu peux toujours utiliser un type String et tu laisses à MFC le problème.

Bien à toi,

Pierre
0
Rejoignez-nous