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 : Allocation mémoire [ Archives / Fichier / Disque ] (thedestiny)

jeudi 12 mai 2005 à 23:27:30 | Allocation mémoire

thedestiny

Voila je présente mon projet brievement :
C'est un programme qui est censé ouvrir un fichier d'une taille assez conséquente ( 20 mo environ )
Plusieurs allocations en mémoire sont alors éffectuées. Je commence à allouer un buffer de la taille du fichier en mémoire pour procéder au décryptage. Ensuite, je fait appel à plusieurs procédures de chargement des informations qui transfert ca dans une structure qui contient toutes les variables utilisées ( 120 - 130 au total ), cependant lors de chaque procédure, je fais une allocation en mémoire de ma structure. Lorsque toutes les procédures ont été réalisées, je free la mémoire du buffer contenant les données du fichier, j'affiche les informations que contient le fichier, je free lles données de toutes les structures et je quitte.

Le problème est que, je ne sais pas pourquoi, ni la méthode avec malloc() ni celle de new MaStruct[] ne veut m'allouer ma mémoire nécessaire, c'est à dire approximativement 40 mo au total, il se bloque à environ 11 mo en arretant le chargement mais en restant en mémoire...
Pourtant après quelques tests, il veut bien allouer 120mo sans probleme ( certes le test les allouer en une seule fois ) donc je ne vois pas le problème, sauf si cela vient du fait qu'il y a plusieurs allocations :/

Extrait du code qui foire :
 World.ClanCount = LoadLong(pData);
 printf("Number of Clans : %i \n",World.ClanCount);

 if(World.ClanCount > 0)
 {
     World.Clans = new WDAClan [World.ClanCount];
     for (i=0;i<World.ClanCount;i++)
     {
       World.Clans[i] = LoadClan(pData);
     }
}

Si vous avez des solutions, je suis tout houïe ( ou quelque chose comme ca )

Amicalement,
The Destiny


vendredi 13 mai 2005 à 00:14:59 | Re : Allocation mémoire

vecchio56

Administrateur CodeS-SourceS
C'est bizarre, a priori c'est plus difficile d'allouer 120Mo en plusieurs fois qu'en une seule fois. Est-tu bien sur que c'est un problème d'allocation et non un bug dans ton code? Et est-tu de ne pas allouer plus que ce que tu pense. Si tu code en Win32, tu peux essayer VirtualAlloc, s'il y a des problèmes d'allocation tu pourra peut-être avoir plus d'informations.

vendredi 13 mai 2005 à 00:18:02 | Re : Allocation mémoire

thedestiny

Merci je vais tester et voir le résultat.
Je te tiens au courant :)

Amicalement,
The Destiny

vendredi 13 mai 2005 à 00:20:33 | Re : Allocation mémoire

sebseb42

est-ce que tu es sur un poste "normal" ou bien tu travail sur un rezeau administrer ou encore sur un environement limiter ?

est-ce que tu test bien tout tes malloc, et est-ce que tu es sure des tailles que tu lui fournit ? peut-etre qu'a un moment donné tu lit une mauvaise valeur et tu appel malloc en lui donnant une taille trop grande.

ce que je te conseil pour le moment, c'est de faire provisoirement une fonction my_malloc comme ceci :

void* my malloc(int size, char *identifiant)
{
    void* ptr;

    printf("%s : %d\n", identifiant, size);
    ptr = malloc(size);
    if (ptr == null)
    {
        printf("erreur malloc\n");
        exit(0);
    }
    return (ptr);
}

et tu remplace tout tes malloc par des my_malloc et tu rajoute une chaine qui te permettra d'identifier ton malloc, par exemple le nom de ta fonction, ou encore le nom de ta fonction suivit d'un numero si tu as plusieur malloc dans une meme fonction.

cela te donnera deja probablement beaucoup d'indication de debug... du moins je l'espere.


samedi 14 mai 2005 à 13:46:49 | Re : Allocation mémoire

thedestiny

> Vecchio : J'ai eu quelques petits problèmes avec VirtualAlloc, notamment le fait qu'il me disait qu'un page fallait 4096 octets ( ca fait léger lol :p ) En plus VirtualAlloc plantait carrément :(

> SebSeb : J'ai testé avec ta fonction
1ere Alloc ( pour le fichier ) ca correspond, 19 806 275 )
La 2eme tout va bien aussi ( 762 )
3eme idem ( 4 )
4eme idem ( 1658 )
5eme idem ( 1467 )
6eme idem ( 279 )
7eme idem ( 267 )
8eme idem ( 1114 )
et le 9eme crash ce coup la...

Je vais juste vérifier quelque chose qui me semble louche car je crois que je lis pas les valeurs qui doivent être contenues par mon pointeur.
En plus c'est un peu chiant car à chaque fois j'ai 19mo qui ne sont pas désalloué :(

Merci en tout cas :)

Amicalement,
The Destiny



Cette discussion est classé dans : fichier, mémoire, world, allouer, clancount


Répondre à ce message

Sujets en rapport avec ce message

Mémoire à allouer optimale pour une copie de fichier [ par 0v3rb1t ] Bonjour.1) Je souhaiterai connaitre la valeur optimale de mémoire à allouer pour une copie de fichiers binaires.2) De quel type doit être le pointeur comment lire ou écrire à un fichier dans la mémoire ? [ par ilimo ] bonjour,je sais ouvrir un fichier dans la mémoire..mais comment le lire à partir de cette même mémoire ?merci pour votre aide ...-------------j'utilis Pb d'allocation mémoire malloc [ par oz80 ] Bonjour à tous, j'ai un problème d'allocation de mémoire je pense. Je déclare une variable comme ceci : <TBOD Allocation mémoire impossible [ par tzandre ] hello, Je fais du calcul scientifique, j'ai une machine avec 2G de RAM, mon job fait des allocations pour 1,3Gb avant de libérer de la mémoire pour se allouer de la mémoire pile. [ par deck_bsd ] Bonjour, Voila j'ai un problème , j'ai fait une partie de programme qui est chargé d'allouer juste assez de mémoire a un pointeur  de type char pou Zipper un Fichier [ par wxccxw ] Hello World ! bon bon ma petite question du mois :) j'aimerai zipper un fichier mais sans WinZIP ni WIN rar juste avec celui de base sur windows mais Gros fichier mémoire (block par block) [ par jockos ] Bonjour,Je développe un logiciel de cryptage.Mon logiciel doit pouvoir crypter de très gros fichier (plusieurs centaines de Mo).Je monte le fichier en mémoire en trop [ par deck_bsd ] Bonjour, Voici une procédure charger de remplir un liste chainée en lisant les donnée d'un fichier binaire : void LectureDuFichier(){     FILE *fich Segmenter un fichier en mémoire C (seulement) [ par golum ] Voila pour ouvrir a partir de mon prog c un fichier de 20 Mo je met 1min et j'aimerais a tout pris diminuer ce temps.Est-il possible de segmenter le f charger bitmap depuis mémoire ?? [ par cybermax62 ] je voudrais charger un bitmpa depuis une fichier.Je m'explique :je veux me faire un fichier du type *.pak pour stocker mes données (des images). Donc


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 1,14 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.