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

Langage C++ Discussion :

Overhead lié à l'allocation dynamique en C/C++


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 3
    Par défaut Overhead lié à l'allocation dynamique en C/C++
    Bonjour,

    Lors d'un entretien, on m'a posé la question suivante:

    En C/C++, savez-vous s'il existe un overhead du à l'allocation dynamique de mémoire? Par exemple, lorsque vous faîtes malloc(1), quelle est la quantité réelle de mémoire allouée sur le tas ? 1 byte ou plus ?

    Un ami m'a affirmé que cela dépendait de l'OS, sous linux par exemple, les allocations se font à la puissance de 2 immédiatement supérieure ( malloc(1) ==> 2 bytes alloués, malloc(6) ==> 8 bytes alloués).

    J'aimerais confirmation de ses propos, et si quelqu'un à de la doc sur ce sujet, je suis preneur, je n'ai pas trouvé grand chose sur le net...

    Merci d'avance.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 3
    Par défaut Un début de réponse
    J'ai trouvé ce mini-article : http://www.concentric.net/~ttwang/tech/smallmem.htm

    Ce passage:
    With the current generation of modern computers, it has become common practice to align memory blocks on double word (8 byte) boundaries. [HP94] Normally, a memory block is preceded by its memory header. By the same alignment requirement, the memory header often occupies 8 bytes as well.
    If the memory allocation is for 1024 bytes, the header overhead is quite small (8 / 1032). However, if the memory allocation is for 8 bytes, the header overhead then becomes 50%!...
    Cela donne un début de réponse, mais le sujet est traité succinctement.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Le fait est que 1 est la taille classique d'un byte (nous pourrions même aller jusqu'à dire d'un (signed / unsigned ) char, étant donné que c'est garanti par la norme ;-)) et que, classiquement, la taille minimum allouée est suffisante pour passer de l'adresse mémoire à laquelle le char sera effectivement placé à l'adresse mémoire suivante!

    Il y aura donc bel et bien un alignement des données, et donc un overhead, mais ce n'est pas, comme ton copain te l'as dit équivalent à la puissance 2 directement supérieure, encore heureux!! : il dépendra essentiellement de la taille du byte (ce n'est pas toujours 8 ) et de la taille des données séparant deux adresses mémoires accessibles (ce sera toujours un multiple de la taille du byte )

    Pour ne prendre que l'exemple des PC, tu aurais donc un overhead de 7 bytes sur les arhitectures 64bits et de 3 bytes sur les architectures 32 bits (note que le type de OS (32 Vs 64 bits) ici : il intervient essentiellement sur la plage d'adresses accessibles )

    Cet overhead correspond à ce que l'on appelle l'alignement des données.

    Cependant, il est toujours possible d'éviter l'alignement des données avec certaines options de compilation spécifiques, mais à tes risques et périls
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 3
    Par défaut
    Le lien d'oodini et l'explication donnée par koala01 m'ont permit de bien éclaircir ce problème ==> Resolved.

    Merci à vous deux.

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

Discussions similaires

  1. probleme d'allocation dynamique
    Par vince3320 dans le forum C
    Réponses: 10
    Dernier message: 22/04/2004, 16h27
  2. petit pbm allocation dynamique de stringGrid
    Par AnneOlga dans le forum C++Builder
    Réponses: 10
    Dernier message: 17/01/2004, 11h59
  3. Allocation dynamique de structures
    Par fr_knoxville dans le forum C
    Réponses: 8
    Dernier message: 06/05/2003, 21h59
  4. Allocation dynamique de mémoire en asm
    Par narmataru dans le forum Assembleur
    Réponses: 7
    Dernier message: 17/12/2002, 22h31
  5. Réponses: 4
    Dernier message: 03/12/2002, 16h47

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