IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèque standard C Discussion :

Problème allocation mémoire - malloc () 1Gb


Sujet :

Bibliothèque standard C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 7
    Par défaut Problème allocation mémoire - malloc () 1Gb
    Bonjour,

    J'ai écris un programme de tri en Langage C, compatible Visual Studio 2005, Cygwin, gcc, Unix et Borland (Borland® Developer Studio 2005).

    Tout fonctionne très bien avec les autres compilateurs, mais le Borland - Projet C++ - bcc32 - refuse de m'allouer 950 Mo de mémoire... ??? J'ai bien regardé les paramètres de compilation et de linkeur - ( {heap, stack} reserve | commit size) mais je n'ai rien trouvé... Une idée ???

    J'ai, évidemment, plus de 950 Mo de RAM, de disponible....

    Merci.

    Source : iMaxSize = 1000000000
    --------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...
    		if ( !(pVect->pData = (char *) malloc ( (iMaxSize +  1) * sizeof (char))) ) {
    			snprintf (pErr, ERR_LEN + 1,
    				"%s\nEchec allocation structure Vector (Data) - Size = %d Ko",
    				pErrPrefix, (int) (((iMaxSize +  1) * sizeof (char)) / 1024) );
    			return (NULL);
    		}
    ...

    Output :
    --------
    AcbSortC - Version V.0.95 - Dec 19 2007 - 11:13:55

    Start at : Wed Dec 19 16:09:07 2007

    Utilisation memoire :
    ---------------------
    File(s) size : 7960246 Ko
    Memory in use : 43 %
    Physical memory : 2088432 Ko
    Free physical memory : 1188304 Ko
    Page file : 4023844 Ko
    Free page file : 3277816 Ko
    Virtual memory : 2097024 Ko
    Free virtual memory : 2076744 Ko
    BUFFSIZE : 976562 Ko
    LGRMAX : 333 char
    Full data size : 7960246 Ko
    Full index size : 95618 Ko
    Data size : 964971 Ko
    Index size : 11591 Ko
    Index occurences : 2967358 occurs

    AcbSortC - FATAL ERROR

    Echec allocation structure Vector (Data) - Size = 964971 Ko

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Salut,
    de mémoire, je crois que malloc alloue des blocs mémoire consécutifs. Donc peut-être que tu n'as pas 950 Mo de disponible, consécutif. Et si tu essayais de faire deux tableaux plus petits ?

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    en plus, je veux pas dire, mais allouer 950 Mo ....

    A mon avis y aurait comme un petit probleme de conception.....

  4. #4
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 7
    Par défaut
    1.) Comme je vous l'ai dit, j'ai bien plus 950 Mo disponible...

    => Free physical memory : 1188304 Ko

    2.) malloc() peut allouer jusqu'à 2 Go, ce que j'ai déjà fait.

    Prototype : void * malloc (size_t size);

    3.) Il n'y a pas de raison que cela ne fonctionne pas puisque cela fonctionne sous Visual Studio, Cygwin, OpenBSD, Linux, et Aix...

    4.) Problème de conception... Pourquoi ne pas allouer 2 Go, lorsqu'une fonction C Ansi l'autorise ? C'est un programme de tri (QuickSort)... Je trie des fichiers de 60 Go !!! Tu veux que je travaille avec des blocs de 5 Ko ???

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    il esrt simplement plus portable, si tu veux pas te demander un jour (ou tes clients ou ton employeur) pourquoi le programme plante, au minimum de passer la taille en paramètre de lancement...

    Et miser sur le fait qu'un ordi aura 2Go de mémoire... A part si c'est pour tourner une seule fois (pour re-trier une base), mais sinon c'est pas mal violent comme approche...

    Et quand je parle de problème de conception, c'est que le tri (l'élément qui sert à trier) ça m'étonnerait qu'il se fasse sur 2 Go, même si la base fait 2go ou 60... (si c'est par exemple le numéro de ligne plus 60 caractères, ça ne fait que 64 * 20 millions d'enregistrements par exemple, c'est à dire 1.3 go. Si c'était un numéro et 1 autre entier, c'est 160 Mo (pour 20 millions d'enregistrements (quelle que soit leur taille) triés simultanément))


    Enfin, ce que j'en dis, c'est mon opinion.... je ne connais pas ton problème...

    Après on se demande pourquoi tous les 6 mois il y a de nouvelles générations - souvent incompatibles - avec plus de mémoire et plus de CPU que les calculs d'hydrodynamique et des problèmes à N corps nécessitent ..

  6. #6
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 7
    Par défaut
    Bon, je ne veux pas m'éloigner du sujet...

    A la base, j'ai un problème que je veux régler.

    Je veux faire un malloc() de 950 Mo, alors que la fonction permet d'allouer jusqu'à 2Go, et cela plante en Borland C++ 2005 alors que cela fonctionne avec tous les autres systèmes testés (Visual Studio, Cygwin, OpenBSD, Linux, Aix...) et que j'ai suffisamment de RAM disponible...

    Est-ce que quelqu'un a une explication ?

  7. #7
    Membre chevronné Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Par défaut
    Citation Envoyé par Gellius31 Voir le message
    1.) Comme je vous l'ai dit, j'ai bien plus 950 Mo disponible...

    => Free physical memory : 1188304 Ko

    2.) malloc() peut allouer jusqu'à 2 Go, ce que j'ai déjà fait.

    Prototype : void * malloc (size_t size);

    3.) Il n'y a pas de raison que cela ne fonctionne pas puisque cela fonctionne sous Visual Studio, Cygwin, OpenBSD, Linux, et Aix...
    C'est donc que vous n'appelez pas le "bon" malloc()
    J'ai un peu laissé tomber Borland, mais le problème me rappelait quelque chose, j'ai testé ce matin sur une Turbo C++.
    Effectivement, si vous laissez coché Projet / Options / Lieur / Liaison / Utiliser la RTL dynamique, vous utilisez un cc32?0.dll. Si vous le décochez, vous liez quelque chose en statique et ça marche alors comme vous le souhaitez.
    Il faudrait voir maintenant comment vous allez déployer, et s'il est possible d'utiliser msvcr???.dll.

    4.) Problème de conception... Pourquoi ne pas allouer 2 Go, lorsqu'une fonction C Ansi l'autorise ? C'est un programme de tri (QuickSort)... Je trie des fichiers de 60 Go !!! Tu veux que je travaille avec des blocs de 5 Ko ???
    "Expliquez moi ce dont vous avez besoin, je vous expliquerai comment vous en passer." Coluche.
    Dans le même genre, êtes-vous en C (lié ou non à du C++) ou en C++ ? Dans le premier cas, ne pas caster le malloc(). Dans le second, peut-être utiliser new.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème allocation mémoire
    Par Keewee dans le forum C++
    Réponses: 17
    Dernier message: 14/03/2008, 13h33
  2. Problème allocation mémoire
    Par Hurin dans le forum Débuter
    Réponses: 7
    Dernier message: 04/02/2008, 23h03
  3. Problème allocation mémoire
    Par Arnaud F. dans le forum C
    Réponses: 9
    Dernier message: 08/04/2007, 13h42
  4. problème allocation mémoire
    Par kinta dans le forum C++
    Réponses: 7
    Dernier message: 09/02/2006, 23h22
  5. Pb d'allocation mémoire malloc
    Par oz80 dans le forum C++
    Réponses: 5
    Dernier message: 18/11/2005, 17h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo