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 Discussion :

Limites de l'allocation dynamique en C


Sujet :

C

  1. #1
    Candidat au Club
    Femme Profil pro
    usthb
    Inscrit en
    Janvier 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : usthb

    Informations forums :
    Inscription : Janvier 2016
    Messages : 3
    Par défaut Limites de l'allocation dynamique en C
    Bonjour,

    Pour un de mes programmes j'ai besoin de manipuler des tableaux d'entiers 3D de t'aille approximative 10000*100*10000. je rencontre bien évidemment des problèmes pour cela notamment sur 4g de RAM (possibilité de tester sur plus). On essaye de me convaincre de passer au C++ qui pour lui l'allocation dynamique est optimale (étant déjà codé ) et de profiter des classes vector et array. Ma question: est ce que cela est vrai??? pourrais je économiser la mémoire utilisée par mon programme en utilisant le C++??? Merci.

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Euh.. non si ce n'est pas possible en C ça ne le sera pas plus en C++. Là tu outrepasses les limites de la machine, pas celles du langage de programmation.

    Pour réaliser cela il faut mapper ta ressource (fichier(s) sur disque, ressource réseau...) en mémoire système, c'est-à-dire en avoir une vue restreinte dans un tampon en RAM. L'idée étant que tu rapatries régulièrement les parties que tu souhaites consulter tout en renvoyant les changements. L'implémentation d'un tel système dépend énormément des données à traiter et de la manière dont on prévoit d'y accéder. Alternativement tu peux regarder du côté d'appels système du type mmap (non portable).

    Je ne sais pas quel est ton niveau, mais c'est loin d'être trivial.

    Tu ne peux pas foutre tout ça dans une base de données MySQL ou PostGre ?

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 600
    Par défaut
    Des tableaux de taille 37G
    Même sur gros système, je n'ai jamais vu cela.
    Je pense que dans tous les cas, il faudra gérer cela de manière particulière, ou bien attendre la création d'une machine suffisamment puissante.

  4. #4
    Candidat au Club
    Femme Profil pro
    usthb
    Inscrit en
    Janvier 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : usthb

    Informations forums :
    Inscription : Janvier 2016
    Messages : 3
    Par défaut
    Citation Envoyé par dalfab Voir le message
    Des tableaux de taille 37G
    Même sur gros système, je n'ai jamais vu cela.
    La taille est de 20G0 si je code en short type.

    Citation Envoyé par Matt_Houston Voir le message
    Euh.. non si ce n'est pas possible en C ça ne le sera pas plus en C++. Là tu outrepasses les limites de la machine, pas celles du langage de programmation.
    Ceci répond parfaitement à ma question je te remercie.

    Citation Envoyé par Matt_Houston Voir le message
    . Tu ne peux pas foutre tout ça dans une base de données MySQL ou PostGre ?
    J'ai songé à les conserver sur un .txt et avoir un compromis entre vitesse de performance et mémoire, mais comme il s'agit d'un 3D je bloque un peu dans l'accès aux éléments.

  5. #5
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Ca m'étonnerait que tu aie réellement besoin de tout cela en même temps.
    Ne pourrais-tu pas répartir le calcul par blocs?

  6. #6
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Quels sont les traitements à appliquer sur ces données ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  7. #7
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Billets dans le blog
    21
    Par défaut
    J'ai songé à les conserver sur un .txt et avoir un compromis entre vitesse de performance et mémoire, mais comme il s'agit d'un 3D je bloque un peu dans l'accès aux éléments.
    Je pense que tu vas devoir en passer par là. Quelles sont tes difficultés pour accéder aux éléments?

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Quels sont les traitements à appliquer sur ces données ?
    +1

    Il nous faut beaucoup plus de détails sur ce que tu cherches à faire. Oui en short tu gagneras peut être un peu de place, la encore faudrait en savoir plus sur les données. Quel est ton niveau par rapport à la gestion de la mémoire ? Quelle plateforme (Linux/Windows) ? Ton programme est-il dédié uniquement à la manipulation de tableaux 3D ou effectue t-il d'autre opérations ? ( en continue/différé) ? Ces données seront-elles partagées entre différentes machines une fois traitées ?
    Au final on peut toujours trouver quelque chose d’efficace (mais surement au détriment de la flexibilité, si ton programme dois évoluer sur le long terme)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    J'ai songé à les conserver sur un .txt et avoir un compromis entre vitesse de performance et mémoire, mais comme il s'agit d'un 3D je bloque un peu dans l'accès aux éléments.
    As-tu pensé à un tableau de structures ? Ça sera plus simple à traiter. Oui il te faudra passer par un fichier externe pour sauvegarder et lire. En utilisant mmap() intelligemment tu te débarrasseras de pas mal d'appels systèmes d'accès au fichier (étant chargé en mémoire. Il se manipulera donc beaucoup plus facilement !)

  9. #9
    Candidat au Club
    Femme Profil pro
    usthb
    Inscrit en
    Janvier 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : usthb

    Informations forums :
    Inscription : Janvier 2016
    Messages : 3
    Par défaut
    Citation Envoyé par Aurel-R Voir le message
    Quels sont les traitements à appliquer sur ces données ?
    +1

    Il nous faut beaucoup plus de détails...............
    Alors, Merci d'abord, et puis pour répondre, je suis passée au type short et j'ai pu gagner de la mémoire, j'ai revu tout le code pratiquement et je suis passée de 2 tableau à un seul (réinitialiser à chaque fois et recalculer sur la même SSD) au détriment du temps de calcul. mais je reste dans le raisonnable. Les tableaux 3D sont la SSD la plus importante, le reste se fait sans soucis (des calculs principalement en continue). Les données ne seront pas partagées. En ce qui concerne la plate forme, je suis suis windows, j'ai eu la chance de trouver une machine à 32Go de Ram sous linux, Mais à ma grande déception le code qui fonctionne parfaitement chez moi bloque sur une ligne parfaitement banale: " Typedef short int monType " et il m'annonce : redefinition of type monType. j'essaye de regler ça au plus vite mais ça bloque toujours

  10. #10
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Tu ne réponds pas vraiment à la question citée, c'est plus que vague. Mais tu es peut-être sous NDA...

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 400
    Par défaut
    Citation Envoyé par Zinoubad Voir le message
    J'ai songé à les conserver sur un .txt et avoir un compromis entre vitesse de performance et mémoire, mais comme il s'agit d'un 3D je bloque un peu dans l'accès aux éléments.
    Non, pas un texte. Pour ça, il te faudrait un fichier binaire (indispensable pour de l'accès aléatoire). Idéalement, tu dois identifier dans quelle dimension les valeurs doivent être "proches" en mémoire, et mettre cette dimension "en dernier".

    Et ensuite, faire un paging: Lorsque tu as besoin de la valeur, monTableau[a][b][c], ce dont tu as besoin c'est la page contenant, par exemple, tout monTableau[a][b]. Ton code utilisateur va donc la réclamer à un gestionnaire de pages que tu auras aussi implémenté.
    • Si la page est déjà chargée dans le gestionnaire, il peut simplement la retourner et permettre l'accès aux valeurs qui s'y trouvent.
    • Sinon, il faut la charger. Et si le gestionnaire de pages est plein, il faut en libérer une: tu choisis dans ton gestionnaire de pages celle que tu vas sacrifier; tu écris dans ton fichier, au bon emplacement, tout le contenu de ladite page; puis tu charge celle dont tu as besoin.

    Optionnellement, tu pourrais aussi inclure un mécanisme pour savoir si une page est accédée en écriture ou en lecture, pour savoir si tu dois ou non passer par l'étape "écrire le contenu de la page dans le fichier".

    Noter que l'OS peut avoir des mécanismes de mapping pouvant faire une partie du travail pour toi (comme dans le cas des File Mapping de Windows, lire et écrire le contenu des pages, et probablement aussi détecter les modifications).
    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.

Discussions similaires

  1. Allocation dynamique de mémoire : Limitations ?
    Par rulianf dans le forum C++
    Réponses: 5
    Dernier message: 22/03/2006, 18h03
  2. petit pbm allocation dynamique de stringGrid
    Par AnneOlga dans le forum C++Builder
    Réponses: 10
    Dernier message: 17/01/2004, 12h59
  3. Allocation dynamique de structures
    Par fr_knoxville dans le forum C
    Réponses: 8
    Dernier message: 06/05/2003, 22h59
  4. Allocation dynamique de mémoire en asm
    Par narmataru dans le forum Assembleur
    Réponses: 7
    Dernier message: 17/12/2002, 23h31
  5. Réponses: 4
    Dernier message: 03/12/2002, 17h47

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