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

C++Builder Discussion :

memoire trop grande plantage de BCB


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 39
    Par défaut memoire trop grande plantage de BCB
    Bonjour pour mon application j'ai besoin de declarer des gros gros gros tableaux.

    voici ma déclaration en structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    //STRUCTURE POUR LA MEMORISATION DU TABLEAU ACQUISITION
    // Structure d'un élément de mémorisation
    typedef struct {
           double date;
           float IBrut;
           float IFiltre;
           float TBrut;
           float TFiltre;
     
    }TAB_VAL;
     
    //STRUCTURE POUR LA MEMORISATION DES TABLEAUX DES TRAITEMENTS
    // Structure d'un élément de mémorisation
    typedef struct {
           double milliseconde;
           TAB_VAL acquisition[9000];
           TAB_VAL tab1s[3456000];
    }ENREGISTREMENT;
    si je compile un simple project qui dans son unité principale a déclaré un ENREGISTREMENT, j'ai le message suivant :

    [Lieur Erreur] Fatal: Access violation. Link terminated.
    je sais que c'est dût à la lourde allocation de memoire que je demande au compilateur.

    Mais je voulais savoir si il y a moyen d'augmenté la limite bcb des tableaux

    Ou comment faire pour pouvoir declarer mes enormes tableaux pour qu'il passe?

    Si la declaration dynamique est la solution qq pourrais me mettre le bout de code d'une declaration de structure dynamique merci

    Merci a tous

  2. #2
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Bonjour,

    cette application n'est pas raisonnable.
    La structure initiale coute 36 octets.
    La seconde structure coute 124 GOctets

    Je sais bien qu'aujourd'hui, les machines sont puissantes, mais faut pas exagérer

    Tu l'as dit, la solution est dans la déclaration dynamique sur le tas.
    Essaie les recherches sur 'new' et 'delete'. N'oublie pas 'delete' pour la bonne gestion des ressources mémoire.
    Ensuite il faudra que tu soulages périodiquement la mémoire en sauvant les données au fur et à mesure dans un fichier.

    Pourquoi ne pas essayer la gestion par base de données...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 39
    Par défaut
    bnjour rtg57,

    je comprends pas ton calcul
    un double fait 8 octet,
    un float fait 4 octet,

    donc la premiere structure fait 24 octets

    la seconde structure fait :

    double milliseconde : 8 octet
    TAB_VAL acquisition[9000] : 24*9000 = 216 ko
    TAB_VAL tab1s[3456000] : 24*3456000=82 944 ko

    Ce qui donne en tout pour la deuxiémee structure : 83,16 Mo
    comment tu arrives à 124 Go??????

  4. #4
    Membre éprouvé
    Inscrit en
    Mars 2002
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 105
    Par défaut
    Bonjour,

    Pour infos, j'ai copier/coller les structures présentées ci dessus dans un nouveau projet (il n'y a donc presque rien d'autre). Le projet a bien compilé.

    A l'exécution, j'affiche la taille d'un objet ENREGISTREMENT : 83160008 octets, donc 81 210 ko ou bien 79 Mo (comme on pouvait effectivement s'attendre d'après le calcul).

    J'ai utilisé BDS 2006 (et donc pas de problème de link).

    Nicolas

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 39
    Par défaut
    Bonjour

    Merci Nicolas pour ses infos mais cela prouve que c'est une limitation du compilateur BCB 6 puisque chez vous, il n' y a pas de souci de compilation en Borland developer Studio 2006.
    En plus vous confirmez la taille mémoire que j'annoncais.
    Mais maintenant qq pourrais me dire qu'est ce qui bloque?
    Est ce que qq pourrais tester les structures en BCB 6 pour voir si ca marche?

    Merci d'avance

  6. #6
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 528
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 528
    Par défaut
    pour les grosses allocations mémoires il est préférable d'utiliser les fonction systèmes / API Windows comme GlobalAlloc...
    car c'est l'OS qui s'occupe des stratégies mémoire
    voir MSDN

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/04/2011, 13h34
  2. Réponses: 7
    Dernier message: 07/07/2005, 17h20
  3. tableau trop grand ?
    Par Praxe dans le forum C++
    Réponses: 17
    Dernier message: 17/03/2005, 14h14
  4. modélisation d'une base : table trop grande
    Par Shabata dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 22/11/2004, 11h44
  5. Surface trop grande
    Par Black_Daimond dans le forum DirectX
    Réponses: 1
    Dernier message: 18/01/2003, 03h02

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