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 :

Probleme d'allocation memoire


Sujet :

Bibliothèque standard C

  1. #1
    Membre éclairé Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Points : 724
    Points
    724
    Par défaut Probleme d'allocation memoire
    Bonjour,

    Je realise une application en Visual Sudio 2005 en C mode console.

    Je suis sur Windows 2003 x64 avec 16Gb de RAM (9 Gb de libre)

    Je veux allouer un bloc de memoire de 1.5 Gb
    Impossible alors que normalement ca devrai etre bon etant donne que la limite par process est de 2Gb
    J'ai essaye calloc, malloc, VirtualAlloc... pas moyen

    Ps: j'utilise une biblioteque oracle qui n'existe pas en 64 bits sans quoi j'aurai compile en x64 ;-)

    Merci a vous
    jko
    OCM 11g, RAC and Performance & Tuning Expert 11g
    RMAN Backup & Recovery, Data Guard and Grid Control

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Peux-tu poster le code d'allocation?
    Alloues-tu ce bloc en tout premier?
    Si tu décomposes VirtualAlloc() en deux appels pour Reserve et Commit, lequel foire?

    Je ne sais pas si je pourrais t'aider. Mais pour l'allocation, je te conseille de ne pas utiliser autre chose que VirtualAlloc().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éclairé Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Points : 724
    Points
    724
    Par défaut
    Yes,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        g_Object = (S_Obj*) VirtualAlloc (NULL,23000* sizeof (S_Obj),MEM_COMMIT,PAGE_READWRITE);
    23000* sizeof (S_Obj) fait env 1.5 Gb
    Voila
    Jko
    OCM 11g, RAC and Performance & Tuning Expert 11g
    RMAN Backup & Recovery, Data Guard and Grid Control

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Serait-ce lié à ce problème?
    Citation Envoyé par [URL=http://msdn.microsoft.com/en-us/library/aa366887%28VS.85%29.aspx]MSDN[/URL]
    To reserve and commit pages in one step, call VirtualAlloc with MEM_COMMIT | MEM_RESERVE.

    The function fails if you attempt to commit a page that has not been reserved. The resulting error code is ERROR_INVALID_ADDRESS.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre éclairé Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Points : 724
    Points
    724
    Par défaut
    Non,

    En fait 23000 * sizeof (S_Obj) fait 837Mo seulement en realite je voulais allouer le double.

    Je trouve ca curieux

    jko
    OCM 11g, RAC and Performance & Tuning Expert 11g
    RMAN Backup & Recovery, Data Guard and Grid Control

  6. #6
    Membre éclairé Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Points : 724
    Points
    724
    Par défaut
    Je viens de faire un petit test avec un projet de type Win32 Console application.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
      char * toto = (char*) calloc (1000000,1400);
     
      if (toto)
       free (toto);
    return 0;
    Ca lloue un peut plus de 1.3Gb et ca fonctionne!
    Ca doit etre qlq chose au niveau de mon projet mais je vois pas quoi.
    Jko
    OCM 11g, RAC and Performance & Tuning Expert 11g
    RMAN Backup & Recovery, Data Guard and Grid Control

  7. #7
    Membre éclairé Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Points : 724
    Points
    724
    Par défaut
    Trouve:

    J'utilise la librairie Oracle Object for ole 11g.

    L'appel a la fonction OStartup produit une reservation importante de memoire. (en fait il reserve presque 1.3 Gb).
    Il prend un % de ka memoire dispo.

    Ceci limite la memoire restante.

    Solution: allouer 1.5 Gb avant puis demarrer les classes oracle ensuite.


    Curieux quand meme.
    jko
    OCM 11g, RAC and Performance & Tuning Expert 11g
    RMAN Backup & Recovery, Data Guard and Grid Control

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    En fait tu n'as pas pu allouer cette taille aprés avoir chargé oracle simplement parceque windows a chargé les DLL d'oracle un peu n'importe ou dans les 2 giga de mémoires addressable par ton process.

    De fait il n'était plus possible d'allouer 1.5Giga contigue, par contre en commancant par allouer l'espace dont tu avais besoin suivi du chargement dynamique des DLL celle-ci ont été assignées à des adresses encore disponible grâce aux méchanisme de .reloc

    Cédric

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 22/07/2011, 15h28
  2. Probleme d'allocation memoire
    Par kimikimi dans le forum C
    Réponses: 2
    Dernier message: 05/04/2011, 10h55
  3. Probleme d'allocation memoire et free()
    Par Darksnakes dans le forum Débuter
    Réponses: 6
    Dernier message: 19/03/2008, 18h53
  4. Problèmes d'allocation memoire
    Par nina2007 dans le forum Linux
    Réponses: 0
    Dernier message: 16/08/2007, 16h19
  5. probleme avec les allocations memoires
    Par david35 dans le forum C
    Réponses: 5
    Dernier message: 21/10/2005, 11h49

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