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

Autres éditeurs Discussion :

Modele de memoire


Sujet :

Autres éditeurs

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 277
    Par défaut Modele de memoire
    Bonjour,

    Sur http://fr.wikipedia.org/wiki/X86 on peut lire, en gros que le modèle de mémoire LARGE permet d'avoir plusieurs segments de code et de data.

    Avec Turbo C, configuré avec le modèle de mémoire large, je compile le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    unsigned char toto[65000];
    unsigned char titi[65000];
     
    main()
    {
       return(0);
    }
    Et la j'ai l'erreur:

    Too much global data defined in file

    C'est bizarre, en modèle tiny ou medium cela ne m'aurait pas choqué, mais en large le compilateur devrait trouver les adresses des variables à partir du segment et de l'offset ?

    Sur un autre code, compilé toujours en mémoire large, et en regardant avec Turbo Debugger je constate qu'il accède à la variable uniquement avec son offset, DS étant initialisé au segment de début de donnée, et pas réactualisé si on change de segment. Donc si les données globales dépassent ce segment, il n'arrive pas à y accéder.

    Je suis novice en C, quelqu'un pourrait-il m'expliquer d'où vient mon erreur ?

    Cordialement.

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Lovmy Voir le message

    Sur http://fr.wikipedia.org/wiki/X86 on peut lire, en gros que le modele de memoire LARGE permet d'avoir plusieurs segments de code et de data.

    Avec Turbo C, configurer avec le modele de memoire large, je compile le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    unsigned char toto[65000];
    unsigned char titi[65000];
     
    main()
    {
       return(0);
    }
    Et la j'ai l'erreur:

    Too much global data defined in file
    Ce n'est pas un problème de C mais d'architecture. Un x86 en mode réel (16-bit) a une capacité d'adressage de 65536 octets par segment. Or, même en mode large, où le segment de donné n'est pas partagé avec le code, celui-ci ne peut dépasser 65536 octets (et encore, certains sont réservés par le système).

    Ce que tu demandes est donc physiquement impossible en statique. Par contre, tu peux allouer jusqu'à 640k (voire plus avec des astuces plus ou moins complexes) en mémoire dynamique cumulée, tout en sachant qu'un objet ne peut dépasser 64k de mémoire contigüe.

    Si tu as des problèmes de mémoire, je te conseille d'oublier le mode réel (obsolète depuis le 386 et Windows 3.x, années 90/95), et de passer au moins en mode protégé (32-bit) avec un compilateur moderne comme gcc. Quel est ton système ?

  3. #3
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Il n'y avait pas un mode huge qui permettait de s'affranchir des contraintes du mode large sur la taille totale des données globales et la taille des objets?

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Il n'y avait pas un mode huge qui permettait de s'affranchir des contraintes du mode large sur la taille totale des données globales et la taille des objets?
    A ma connaissance, il est buggé.

  5. #5
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    (Ca me rappelle un vieux Borland C pour window 3.1)

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Gruik Voir le message
    (Ca me rappelle un vieux Borland C pour window 3.1)
    Citation Envoyé par P.O.
    Avec Turbo C,

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

Discussions similaires

  1. [LG]Mémoire dynamique
    Par FJUILLET dans le forum Langage
    Réponses: 5
    Dernier message: 10/02/2004, 11h15
  2. [swing] probleme de memoire
    Par leBigouden dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 23/05/2003, 14h19
  3. gestionnaire de memoire
    Par elone dans le forum C
    Réponses: 2
    Dernier message: 23/01/2003, 00h31
  4. récupérer la memoire et tableau dynamique
    Par Guigui_ dans le forum Langage
    Réponses: 6
    Dernier message: 06/01/2003, 08h02
  5. programmation reseau - couche 2 du modele osi
    Par sahor dans le forum C++Builder
    Réponses: 3
    Dernier message: 06/11/2002, 18h33

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