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 :

Ambiguïté terme "Allocation Dynamique"


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Dev
    Inscrit en
    Février 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2017
    Messages : 6
    Par défaut Ambiguïté terme "Allocation Dynamique"
    Bonjour,

    en faisant des recherches sur la définition d'allocation dynamique de mémoire en C je suis tombé sur les articles Wikipédia français et anglais : https://en.wikipedia.org/wiki/C_dyna...ory_allocation
    https://fr.wikipedia.org/wiki/Malloc

    Il me semble qu'il y a une ambiguïté sur l'utilisation du terme "allocation dynamique", en effet, l'article anglais précise que l'allocation dynamique se fait via l'utilisation des fonctions telles que malloc et calloc (donc uniquement sur le tas) :
    "C dynamic memory allocation refers to performing manual memory management for dynamic memory allocation in the C programming language via a group of functions in the C standard library, namely malloc, realloc, calloc and free."

    L'article français stipule, quant-à-lui, que l'allocation dynamique englobe l'utilisation des fonctions telles que malloc et calloc (sur le tas) ainsi que l'allocation automatique (sur la pile). La différence entre l'allocation dynamique et statique se situerait dans le fait que la mémoire serait allouée statiquement à la compilation et dynamiquement au cours de l'execution.

    "L'allocation de mémoire pour un programme peut s'effectuer de trois manières :
    statiquement, au cours de la compilation par la déclaration de variables statiques : variables globales ou variables locales déclarées en utilisant le mot-clé static,
    dynamiquement, au cours de l'exécution :
    soit de façon automatique sur la pile d'exécution : variables locales déclarées dans un bloc d'instructions,
    soit à la demande sur le tas : en utilisant des fonctions d'allocation de la mémoire."

    Pouvez-vous m'éclairer sur la véracité de ces définitions ?
    Est-ce que celles-ci sont valables en C++ ?

    Merci pour votre aide

  2. #2
    Membre Expert
    Avatar de Pyramidev
    Homme Profil pro
    Tech Lead
    Inscrit en
    Avril 2016
    Messages
    1 513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Tech Lead

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 513
    Par défaut
    Bonjour,

    En C et en C++, quand quelqu'un parle d'allocation dynamique, tout le monde le comprendra dans le sens allocation dans la mémoire dynamique (donc pas dans la pile).
    Quand on parle d'allocation à l'exécution, il vaut mieux écrire directement allocation à l'exécution qui est clair plutôt que allocation effectuée dynamiquement qui risque d'être interprété comme allocation dans la mémoire dynamique.

    A part ça, si on regarde du côté de la norme :

    En C et C++, la durée de vie est soit statique, soit thread-locale, soit automatique, soit dynamique. Donc, si elle est dynamique, elle n'est pas automatique.

    N4659 (draft de C++17) §6.7 :
    « The storage duration is the property of an object that defines the minimum potential lifetime of the storage containing the object. The storage duration is determined by the construct used to create the object and is one of the following:
    (1.1) — static storage duration
    (1.2) — thread storage duration
    (1.3) — automatic storage duration
    (1.4) — dynamic storage duration »

    N4659 (draft de C++17) §6.7.4 Dynamic storage duration :
    « Objects can be created dynamically during program execution (4.6), using new-expressions (8.3.4), and destroyed using delete-expressions (8.3.5). A C++ implementation provides access to, and management of, dynamic storage via the global allocation functions operator new and operator new[] and the global deallocation functions operator delete and operator delete[]. »

    ISO_IEC 9899_201x (draft de C11) §6.2.4 Storage durations of objects :
    « An object has a storage duration that determines its lifetime. There are four storage durations: static, thread, automatic, and allocated. »

    Néanmoins, il y a des cas où dynamique signifie bien pendant l'exécution par opposition à pendant la compilation.
    Par exemple, en C++, l'initialisation est soit constante, soit dynamique.

    N4659 (draft de C++17) §6.6.2 :
    « A constant initializer for a variable or temporary object o is an initializer whose full-expression is a constant expression, except that if o is an object, such an initializer may also invoke constexpr constructors for o and its subobjects even if those objects are of non-literal class types. [ Note: Such a class may have a non-trivial destructor. — end note ] Constant initialization is performed if a variable or temporary object with static or thread storage duration is initialized by a constant initializer for the entity. If constant initialization is not performed, a variable with static storage duration (6.7.1) or thread storage duration (6.7.2) is zero-initialized (11.6). Together, zero-initialization and constant initialization are called static initialization; all other initialization is dynamic initialization. All static initialization strongly happens before (4.7.1) any dynamic initialization. »

  3. #3
    Membre habitué
    Homme Profil pro
    Dev
    Inscrit en
    Février 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2017
    Messages : 6
    Par défaut
    Merci pour ces clarifications !

    Bonne journée

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

Discussions similaires

  1. [xsl]simuler le mecanisme OO de "liaison dynamique"
    Par philemon_siclone dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 19/12/2003, 11h34
  2. Allocation dynamique de structures
    Par fr_knoxville dans le forum C
    Réponses: 8
    Dernier message: 06/05/2003, 21h59
  3. Allocation dynamique de mémoire en asm
    Par narmataru dans le forum Assembleur
    Réponses: 7
    Dernier message: 17/12/2002, 22h31
  4. 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