C++ volàtil

C Volatil



'Els desenvolupadors d'aplicacions d'espai d'usuari sempre haurien de fer referència als manuals del compilador rellevants per saber com es pot gestionar el qualificador en diversos contextos perquè el comportament de la paraula clau volàtil normalment s'ha de veure com a dependent del maquinari. Quan un objecte es marca com a volàtil, sovint s'informa al compilador que mai s'ha d'optimitzar per a les operacions de càrrega i que sempre s'ha de recuperar de la memòria primària en lloc de registres o memòria cau. Tanmateix, quan el compilador intenta posar la ubicació de la memòria al registre, s'emmagatzema automàticament a la memòria cau tot i que hi ha nombrosos nivells de memòria cau que en gran part no estan disponibles per al programari i només es mantenen al maquinari. Com a resultat, es pot accedir a la memòria RAM moltes vegades més ràpid des de les línies de memòria cau a prop de la CPU que des d'una ubicació de memòria idèntica.

Els problemes podrien ocórrer si no utilitzem un qualificador volàtil que inclogui, quan l'optimització està habilitada, és possible que el codi no funcioni com s'esperava. Quan s'utilitzen i s'activen les interrupcions, el codi no pot funcionar com estava previst. Les dades només es conserven en emmagatzematge volàtil mentre l'alimentació està encès. Quan s'elimina el subministrament, es produeix la pèrdua de dades.

No obstant això, l'emmagatzematge no volàtil manté les dades encara que s'acabi l'alimentació. La informació del procés s'emmagatzema breument a l'emmagatzematge volàtil, ja que és considerablement més ràpid que l'emmagatzematge no volàtil. A diferència de l'emmagatzematge no volàtil, l'emmagatzematge volàtil és més adequat per protegir les dades sensibles. Això es deu al fet que les dades són inaccessibles quan la font d'alimentació està apagada. L'emmagatzematge volàtil costa molt perquè els sistemes informàtics només poden acomodar uns quants MB a uns quants GB'.







Propietats del qualificador volàtil en C++

Els mitjans de qualificador volàtil C++ es demostraran aquí. Quan declarem una variable, s'aplica el qualificador 'volàtil'. Serveix com a recordatori per al compilador que el valor pot variar en qualsevol moment. Els volàtils posseeixen alguns dels trets que s'enumeren a continuació.



• L'assignació de memòria no es pot canviar amb la paraula clau volàtil.



• Les variables del registre no es poden guardar a la memòria cau.





• Pel que fa a l'assignació, el valor no es pot modificar.

Ús del qualificador volàtil en C++

1. Tot i que el vostre codi no modifica el valor de la variable, és possible que ho faci. Com a resultat, cada vegada que el compilador comprova l'estat de la variable, no pot suposar que és el mateix que el valor més recent llegit d'ella o el valor més recent emmagatzemat; més aviat, ha d'adquirir el valor de la variable una vegada més.



2. El compilador no està obligat a eliminar l'acte d'emmagatzemar un valor ja que és un 'efecte secundari' que es pot veure des de l'exterior i que es produeix quan un valor es guarda en una variable volàtil. Per exemple, si es col·loquen dos valors en una fila, el compilador ha de posar el valor dues vegades.

Sintaxi del qualificador volàtil en C++

# Tipus de dades volàtil nom_variable

La paraula clau volàtil s'ha d'utilitzar a la declaració i el tipus de dades es refereix a qualsevol tipus de dades, com ara double, float o enter. Finalment, escollim un nom per a la variable. Podem definir una variable volàtil mitjançant qualsevol dels mètodes, ja que ambdues declaracions són vàlides.

Exemple: el qualificador volàtil s'utilitza per identificar objectes que es poden modificar per altres fils o accions externes en C++

Si l'objecte es modifica per un senyal exterior o un procediment que actua com a interrupció, el valor alterat s'ha de recuperar de la memòria RAM perquè l'estat de la memòria cau ja no és adequat mentrestant. Com a resultat, el compilador gestiona l'accés als objectes volàtils adequadament.

#inclou
#include
#inclou

utilitzant std :: cout ;
utilitzant std :: endl ;
utilitzant std :: cerr ;
utilitzant std :: menjant ;

volàtil int segons = 0 ;

buit Retard cinc segons ( ) {
mentre ( segons < 3 ) {
dormir ( 200000 ) ;
cerr << 'esperant...' << endl ;
}
}

buit IncrementSeconds ( ) {
per ( int i = 0 ; i < 5 ; ++ i ) {
dormir ( 1 ) ;
cerr << 'incrementat' << endl ;
segons = segons + 1 ;
}
}

int principal ( ) {
estructura inici del temps { } ;
estructura final del temps { } ;
std :: fil fil 1 ;

fil 1 = std :: fil ( IncrementSeconds ) ;

Retard cinc segons ( ) ;

fil 1. uneix-te ( ) ;
tornar EXIT_SUCCESS ;
}


Per il·lustrar l'escenari potencial, hem utilitzat la paraula clau volàtil que té la variable declarada com a segons de tipus de dades 'int' i li hem assignat un valor de 0. A continuació, construïm dues funcions: una com a 'DelayFiveSeconds' que altera la variable entera volàtil global i una altra com a 'IncrementSeconds' que realitza la mateixa avaluació dins del bucle while. Cal tenir en compte que aquest exemple permet que el bucle while hagi fet un bucle durant els segons quan els segons haurien de ser inferiors a 3.

Quan es compleix la condició, s'executarà el bloc while. Dins del bloc while, hem invocat el mètode unsleep que imprimeix la declaració 'esperant'. La funció 'IncrementSceonds' té el bucle for. Després de la iteració, s'invoca el mètode sleep, que imprimeix la instrucció 'increment' i augmenta la variable 'segons'. L'execució inicial de la funció 'IncrementSeconds' es fa mitjançant un fil separat creat per la funció principal. Aleshores, el fil principal crida el mètode 'DelayFiveSeconds', entrant en un bucle que no finalitzarà si la variable segons no es mou per sobre del valor de 5.

Tan bon punt el fil principal noti que el valor de la variable segons ha canviat, tornarà del mètode perquè un altre fil ja ha començat a augmentar-lo simultàniament.

Per executar el codi del fil en C++, hauríem d'utilitzar l'ordre “g++ -pthread –o filename filename.cc”. Si no desplegueu el '-pthread' a l'ordre, hi ha la possibilitat que el compilador tiri una excepció. Com a resultat, vam fer efectivament una funció d'espera condicional que espera fins que l'objecte volàtil sigui canviat per una força externa. És important tenir en compte que el bloc de codi d'actualització podria provenir d'una secció de traducció diferent o d'una acció de senyal externa, tot i que aquest codi seguirà funcionant igual si s'elimina el qualificador volàtil i s'utilitza una variable global convencional.

Conclusió

A continuació, repassem una visió general de Volàtile en C++, juntament amb la sintaxi, l'ús i els exemples adequats per a una millor comprensió. Com que el compilador no pot predir el valor, volàtil és crucial en la programació en C. L'avantatge principal d'utilitzar volàtil és que el seu valor pot variar sempre que un usuari sol·liciti que es modifiqui o quan hi ha actiu algun altre fil que utilitza la mateixa variable.