begin process at 2012 05 29 15:19:22
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Autre

 > 

!!! Pb d'allocation mémoire !!!


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

!!! Pb d'allocation mémoire !!!

samedi 31 mars 2007 à 18:44:16 | !!! Pb d'allocation mémoire !!!

yoyo269

Membre Club
Bonjour à tous !

Comme le titre l'indique, j'ai un petit souci avec l'allocation de mémoire.
En fait j'ai un char*, auquel j'applique un malloc. Ensuite, la taille des données devant être contenues dans le char* n'est pas connue d'avance. J'ai donc pensé à utiliser realloc pour augmenter la taille mémoire. Seulement, de temps en temps, le realloc ne semble pas pouvoir allouer assez de mémoire. Ceci me provoqe alors une erreur.
Connaitriez-vous une fonction ou une technique pour arriver à allouer de nouveau un bloc mémoire sans être rapidement limité (< 10 Mo) ?
Merci d'avance pour votre aide.

PS : si vous souhaitez des détaills, n'hésitez pas !

YOYO, @+.

"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]

dimanche 1 avril 2007 à 02:09:09 | Re : !!! Pb d'allocation mémoire !!!

SAKingdom

Membre Club
Si tu essayais ton propre realloc:

void *myrealloc (void *mem, DWORD oldsize, DWORD newsize)
{
    char *buffer;

    if(!mem || !oldsize || !newsize) return 0;
    if(newsize == oldsize) return mem;
    if(newsize < oldsize) oldsize = newsize;

    if(!(buffer = (char*)malloc(newsize))) return 0;

    memcpy(buffer, mem, oldsize);

    free(mem);

    return (void*)buffer;
}

C++ (@++)

dimanche 1 avril 2007 à 11:02:30 | Re : !!! Pb d'allocation mémoire !!!

yoyo269

Membre Club
Merci SAKingdom pour la fonction, c'est sympa !
Il n'y a pas d'autre(s) moyen(s) afin d'éviter des memcpy ? Parce que si mem fait quelques Mo (ce qui peut arriver), ça risque d'être un peu long non ?

PS : pour l'instant, ma technique est d'utiliser un fichier (et ça fonctionne bien) mais il faudrait que j'arrive à faire le travail en interne du programme.

YOYO, @+.

"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]

dimanche 1 avril 2007 à 14:25:13 | Re : !!! Pb d'allocation mémoire !!!

SAKingdom

Membre Club
Ben à moin de segmenté le buffer (par exemple, avec un tableau de pointeurs), je ne vois pas d'autre solution.

C++ (@++)

dimanche 1 avril 2007 à 15:02:22 | Re : !!! Pb d'allocation mémoire !!!

Matt67

Bonjour,

j'aime bien le "de temps en temps". C'est a dire que tu realloues plusieurs fois de la memoire dans ton programme et, de temps en temps, ca plante ou alors tu lances plusieurs fois ton programme et, de temps en temps, ca plante ?
Tu realloues comment au maximum (environ) ?
Peut-être qu'un bout de code.

Matt...
dimanche 1 avril 2007 à 15:33:11 | Re : !!! Pb d'allocation mémoire !!!

yoyo269

Membre Club
En fait, c'est pour créer une arborescence de dossiers/fichiers. J'utilise donc un code récursif. La taille de l'arborescence est donc aléatoire.
Voilà une explication du code (un peu long) :
Du coup, à l'initialisation j'alloue avec malloc() pour mettre le dossier de départ de l'arborescence. Ensuite à chaque fois que je vais ajouter un fichier ou un dossier à l'arborescence, je fais un realloc(buffer, taille_arborescence + 1000);
Selon ce qui a été ajouté je fais : taille_arborescence += nombre_d'_octets_écrits;
Et ainsi de suite avec la récursivité.
J'ai essayé une autre façon, en faisant un realloc() uniquement quand c'est nécessaire :
if(_msize(Arborescence) < *TailleArb + 1000) Arborescence = (char*)realloc(Arborescence, *TailleArb + 1048576);
J'augmente la taille du bloc mémoire d'1 Mo à chaque fois que sa taille devient limite insuffisante.
Et visiblement ça à l'air de passer comme ça.
Qu'en pensez-vous ?

PS à Matt67 : le programme plante pour certaines arborescences et pas pour d'autres.

YOYO, @+.

"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]

dimanche 1 avril 2007 à 15:41:44 | Re : !!! Pb d'allocation mémoire !!!

SAKingdom

Membre Club
Ton arborescence elle existe (ce sont des fichiers/dossiers qui sont sur le disque) ? Si oui, pourquoi ne pas compter tout ça avant d'allouer ? Tu aurais la somme exacte de mémoire nécessaire et pas de memcpy ou de realloc.

C++ (@++)

dimanche 1 avril 2007 à 15:46:02 | Re : !!! Pb d'allocation mémoire !!!

yoyo269

Membre Club
Oui elle existe. J'ai déjà pensé à calculer la taille avant, mais avec de grosses arborescences ça risque de mettre un peu de temps je pense (?). Donc je préfère faire le boulot (parcourir les dossiers) une seule fois si possible.

YOYO, @+.

"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]

dimanche 1 avril 2007 à 16:15:41 | Re : !!! Pb d'allocation mémoire !!!

SAKingdom

Membre Club
Peut-être mais ça va prendre beacoup moin de temps que de faire des realloc.

C++ (@++)

dimanche 1 avril 2007 à 16:16:55 | Re : !!! Pb d'allocation mémoire !!!

vecchio56

Administrateur CodeS-SourceS
Pour ce genre de choses je fais un seul parcours. Pendant le parcours tu remplis une liste (par exemple) contenant les fichiers et en même temps tu calcules la taille totale. Du coup plus besoin de reparcourir ton arborescence puisque tu as ta liste.

_____________________________________
Un éditeur de ressources gratuit pour Windows


1 2

Cette discussion est classée dans : pb, taille, char, mémoire, allocation


Répondre à ce message

Sujets en rapport avec ce message

pb mémoire (suite) [ par moloko2000 ] Non en fait on ne peux pas allouer une fois pour toute puisque ma fonction c est appelée à chaque enregistrement par un autre programme(4D).Donc l'all Taille d'une structure en mémoire [ par PeteTheBull ] Bonjour J'ai un petit problème en c++ (sous VC++6). Je défini une structure du style : typedef struct     {         __int64 B;       &nbsp allocation mémoire [ par imanewin32 ] je demande à mon prog d'allouer 40 caractère pour un char*et l'allocation se fait tjrs sur seulement 4 caractèrespourquoi? Taille de tableau ? [ par Praxe ] Bonjour à tous Je suis sur un projet vc++ v6 dans lequel je manipule des images. J'ai fait un petit algo qui permet de récupérer des coordonnées de pi f print allocation de memoir [ par sodival ] /* Je souhaiterai écrire le contenu texte d'une variable char dans un fichier, comment faire ?J'ai pri ce code, mais il me comble les espaces non ecri Problème avec taille chaine de caractères variable [ par graphtyrael ] Bonjour à tous !Je cherche à créer une chaine de caractère de taille variable qui s'agrandit au fur et à mesure que je rentre des caractères. J'ai don DLL et allocation mémoire [ par Bebert37 ] Bonjour à tous,J'ai un petit problème de désallocation mémoire avec une DLL.Une Dll alloue de la mémoire pour une programme tièrce, lorsque ce progra pb d'appel de fonctions (DLL en linkage dynamique) [ par Gendal67 ] Bonsoir all,Je souhaiterai faire un appel de fonction définie dans un fichier .DLL de manière dynamque etc...jusque la pas de pb, mais je en comprend Allocation méoire [ par pac2 ] Salut,Dans un de mes programmes je déclare des tableaux de nombres à double précision à 3 dimensions. Je déclare en fait 6 tableaux "double tab[30][30 question d'allocation probleme char char* Question simple [ par youpiyoyo ] voici mon probleme://///////////////////////////////////////////////////int rec = recv(ns,buffer,64*sizeof(char),0); buffer[rec] = '\0' ; //cout


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,153 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales