Gaistošs C++

Gaistoss C



“Lietotāju telpas lietojumprogrammu izstrādātājiem vienmēr vajadzētu atsaukties uz attiecīgajām kompilatoru rokasgrāmatām, lai uzzinātu, kā kvalifikatoru var apstrādāt dažādos kontekstos, jo atslēgvārdu mainīgā darbība parasti ir jāuzskata par atkarīgu no aparatūras. Ja objekts ir atzīmēts kā nepastāvīgs, kompilators bieži tiek informēts, ka to nekad nevajadzētu optimizēt ielādes darbībām un tas vienmēr ir jāizgūst no primārās atmiņas, nevis reģistriem vai kešatmiņām. Tomēr, kad kompilators mēģina ievietot atmiņas vietu reģistrā, tas tiek automātiski saglabāts kešatmiņā, lai gan ir daudzi kešatmiņas līmeņi, kas programmatūrai lielākoties nav pieejami un tiek uzturēti tikai aparatūrā. Rezultātā RAM var piekļūt daudzas reizes ātrāk no kešatmiņas līnijām, kas atrodas netālu no CPU, nekā no identiskas atmiņas vietas.

Problēmas var rasties, ja neizmantojam nepastāvīgu kvalifikatoru, kas ietver, ja optimizācija ir iespējota, kods var nedarboties, kā paredzēts. Kad tiek izmantoti un iespējoti pārtraukumi, kods nevar darboties, kā plānots. Dati tiek glabāti tikai nepastāvīgā krātuvē, kamēr ir ieslēgta barošana. Kad piegāde tiek noņemta, notiek datu zudums.

Tomēr nepastāvīgā krātuve saglabā datus pat tad, ja pazūd strāva. Procesa informācija īslaicīgi tiek glabāta nepastāvīgā krātuvē, jo tā ir ievērojami ātrāka nekā nepastāvīgā krātuve. Pretstatā nemainīgai krātuvei, nepastāvīga krātuve ir vairāk piemērota sensitīvu datu aizsardzībai. Tas ir tāpēc, ka dati nav pieejami, kad strāvas padeve ir izslēgta. Nepastāvīga krātuve maksā daudz, jo datorsistēmas var uzņemt tikai dažus MB līdz dažus GB.







Gaistošā kvalifikatora īpašības C++ valodā

Šeit tiks parādīti C++ nepastāvīgā kvalifikatora līdzekļi. Kad mēs deklarējam mainīgo, tiek izmantots kvalifikators “gaistošs”. Tas kalpo kā atgādinājums kompilatoram, ka vērtība jebkurā laikā var mainīties. Nepastāvīgajiem piemīt dažas no tālāk norādītajām iezīmēm.



• Atmiņas piešķiršanu nevar mainīt ar nepastāvīgo atslēgvārdu.



• Reģistra mainīgos nevar saglabāt kešatmiņā.





• Attiecībā uz piešķiršanu vērtību nevar mainīt.

Gaistošā kvalifikatora izmantošana C++ valodā

1. Lai gan jūsu kods nemaina mainīgā vērtību, tas tomēr var to darīt. Rezultātā katru reizi, kad kompilators pārbauda mainīgā stāvokli, tas nevar pieņemt, ka tas ir tāds pats kā pēdējā no tā nolasītā vērtība vai jaunākā saglabātā vērtība; drīzāk tam vēlreiz jāiegūst mainīgā vērtība.



2. Kompilatoram nav jālikvidē vērtības saglabāšanas darbība, jo tā ir “blakusparādība”, ko var redzēt no ārpuses un rodas, ja vērtība tiek saglabāta mainīgā mainīgajā. Piemēram, ja rindā ir ievietotas divas vērtības, kompilatoram šī vērtība jāievieto divreiz.

Gaistošā kvalifikatora sintakse valodā C++

# Gaistošo datu_tipa mainīgā_nosaukums

Deklarācijā ir jāizmanto nepastāvīgais atslēgvārds, un datu tips attiecas uz jebkuru datu tipu, tostarp dubultu, peldošu vai veselu skaitli. Visbeidzot, mēs izvēlamies mainīgā nosaukumu. Mēs varam definēt nepastāvīgu mainīgo, izmantojot kādu no metodēm, jo ​​abas deklarācijas ir derīgas.

Piemērs: Gaistošais kvalifikators tiek izmantots, lai identificētu objektus, kurus var modificēt ar citiem pavedieniem vai ārējām darbībām programmā C++

Ja objektu maina ārējais signāls vai procedūra, kas darbojas kā pārtraukums, mainītā vērtība ir jāizgūst no RAM, jo kešatmiņas stāvoklis tikmēr vairs nav piemērots. Rezultātā kompilators atbilstoši apstrādā piekļuvi gaistošiem objektiem.

#include
#include
#include

izmantojot std :: cout ;
izmantojot std :: endl ;
izmantojot std :: cerr ;
izmantojot std :: ēšana ;

nepastāvīgs starpt sekundes = 0 ;

nederīgs AizkaveFiveSeconds ( ) {
kamēr ( sekundes < 3 ) {
aizmigt ( 200 000 ) ;
cerr << 'gaidu...' << endl ;
}
}

nederīgs IncrementSeconds ( ) {
priekš ( starpt i = 0 ; i < 5 ; ++ i ) {
Gulēt ( 1 ) ;
cerr << 'palielināts' << endl ;
sekundes = sekundes + 1 ;
}
}

starpt galvenais ( ) {
struktūra laika sākums { } ;
struktūra laika beigas { } ;
std :: pavediens pavediens1 ;

pavediens1 = std :: pavediens ( IncrementSeconds ) ;

AizkaveFiveSeconds ( ) ;

pavediens1. pievienoties ( ) ;
atgriezties EXIT_SUCCESS ;
}


Lai ilustrētu iespējamo scenāriju, esam izmantojuši nepastāvīgo atslēgvārdu, kura mainīgais ir deklarēts kā Sekundes datu tipa “int” un tam ir piešķirta vērtība 0. Pēc tam mēs izveidojam divas funkcijas: vienu kā “DelayFiveSeconds”, kas maina globālo mainīgo veselo skaitļu mainīgo, un otru kā “IncrementSeconds”, kas veic to pašu novērtējumu while cilpas ietvaros. Jāņem vērā, ka šis piemērs pieļauj, ka cilpa while cilpa sekunžu laikā, kad sekundēm jābūt mazākām par 3.

Kad nosacījums atbilst, tiks izpildīts kamēr bloks. Blokā while esam izsaukuši unsleep metodi, kas izdrukā paziņojumu “gaida”. Funkcijai “IncrementSceonds” ir for cilpa. Pēc iterācijas tiek izsaukta miega metode, kas izdrukā paziņojumu “increment” un palielina mainīgo “seconds”. Funkcijas “IncrementSeconds” sākotnējā izpilde tiek veikta ar atsevišķu pavedienu, ko izveido galvenā funkcija. Pēc tam galvenais pavediens izsauc metodi “DelayFiveSeconds”, ievadot cilpu, kas nebeigsies, ja sekunžu mainīgais nepārsniegs vērtību 5.

Tiklīdz galvenais pavediens pamana, ka sekunžu mainīgā vērtība ir mainījusies, tā atgriezīsies no metodes, jo cits pavediens jau ir sācis to palielināt vienlaikus.

Lai palaistu pavediena kodu programmā C++, mums jāizmanto komanda “g++ -pthread –o faila nosaukums faila nosaukums.cc”. Ja komandā neizvietojat “-pthread”, pastāv iespēja, ka kompilators iemetīs izņēmumu. Rezultātā mēs faktiski izveidojām nosacītu gaidīšanas funkciju, kas gaida, līdz gaistošais objekts tiek mainīts ar ārēju spēku. Ir svarīgi paturēt prātā, ka atjaunināšanas koda bloks var nākt no citas tulkošanas sadaļas vai ārēja signāla darbības, lai gan šis kods joprojām darbosies tāpat, ja tiek noņemts nepastāvīgais kvalifikators un tiek izmantots parasts globālais mainīgais.

Secinājums

Šeit ir sniegts pārskats par Volatile valodā C++, kā arī sintakse, lietojums un atbilstošie piemēri labākai izpratnei. Tā kā kompilators nevar paredzēt vērtību, nepastāvība ir ļoti svarīga C programmēšanai. Galvenā nepastāvīgā izmantošanas priekšrocība ir tā, ka tā vērtība var mainīties ikreiz, kad lietotājs pieprasa to mainīt vai kad ir aktīvs kāds cits pavediens, kas izmanto to pašu mainīgo.