const volatile, registre volatile, statique volatile en C++

Je m'interroge sur les différentes utilisations des mots-clés volatile en combinaison avec registre , const et mots-clés statiques . Je ne suis pas sûr de quels sont les effets, donc je pense:

register volatile int T=10;

suggère le compilateur pour stocker T dans un registre et la valeur de T peut être modifiée de quelque part à l'extérieur (OS, hardware, un autre thread)

const volatile int T=10;

le programme lui-même ne peut pas modifier T, mais T peut être modifié quelque part en dehors du code.

static volatile int T=10;

Si T est un membre de données d'une classe, cela signifie que tous les objets de la classe ont la même valeur pour T et T peuvent être modifiés de l'extérieur. Si T est une variable globale dans un fichier, le code source dans d'autres fichiers (qui font partie du projet) ne peut pas accéder à T, mais T peut être accédé de quelque part à l'extérieur. Si T est une variable locale dans un fonction, une fois qu'elle a été initialisée reste dans la mémoire jusqu'à la fin du programme et peut être modifiée de quelque part à l'extérieur.

est-ce que mes pensées sont correctes et est-ce que n'importe quel développeur C++ expérimenté peut donner un exemple où ce qui précède peut être utilisé dans des applications réelles ou est très rare?

25
demandé sur Avraam Mavridis 2013-04-28 09:31:45

1 réponses

register volatile int T=10;

volatile qualificatif signifie que le compilateur ne peut pas appliquer des optimisations ou réordonner l'accès à T , tandis que register est une indication au compilateur que T sera largement utilisé. Si l'adresse de T est prise, l'indication est simplement ignorée par le compilateur. Notez que register est déprécié mais toujours utilisé.

Usage Pratique:

je ne l'ai jamais utilisé jamais ressenti le besoin et le ne peut pas vraiment penser à tout instant.


const volatile int T=10;

const qualificatif signifie que le T ne peut pas être modifié par le code. Si vous tentez de le faire, le compilateur fournira un diagnostic. volatile signifie toujours le même que dans le cas 1. Le compilateur ne peut pas optimiser ou réorganiser l'accès à T .

Usage Pratique:

  • accéder à la mémoire partagée en mode lecture seule.
  • enregistreurs D'accès Matériel en mode Lecture seule.

static volatile int T=10;

static qualificatif de stockage donne T durée de stockage statique (C++11 §3.7) et liaison interne , tandis que volatile régit toujours l'optimisation et la réorganisation.

Usage Pratique:

  • comme Même volatile sauf que vous avez besoin de l'objet pour avoir la durée de stockage statique et d'être inaccessible à partir d'autres unités de traduction.
28
répondu Alok Save 2017-05-23 12:26:33