Шта је класа складишта у Ц ++ и њени типови?



У овом блогу класа складишта, са примерима ћемо погледати разне класе меморије коришћене у Ц ++-у, као што су ауто, регистер, статиц, ектерн и мутабле.

Класа складиштења у Ц ++ дефинише животни век и видљивост променљиве / функције. Животно време је трајање до кога променљива остаје активна, а видљивост је доступност променљиве из различитих модула програма. Ово помаже у праћењу постојања одређене променљиве током извођења програма. У овом блогу класа складишта, погледаћемо разне класе складишта коришћене у Ц ++.

Почнимо.





Шта је класа складиштења у Ц ++?

Свака променљива у Ц ++ има тип података и класу меморије. Тип података одређује тип података који се могу чувати у променљивој као што су инт, флоат, цхар итд. Класа складиштења контролише две различите особине променљиве: животни век и опсег.

Видели бисте да свака променљива има тип података, али можда до сада нисте видели ниједну класу складишта која је придружена променљивој. Заправо, ако не дефинишете класу меморије, преводилац јој аутоматски додељује подразумевану класу меморије. Класа складиштења променљиве даје информације о месту складиштења променљиве у меморији, подразумеваној почетној вредности, опсегу променљиве и њеном животном веку.



Врсте класе складишта

У програму Ц ++ постоји пет класа складишта:

  • ауто
  • регистровати
  • статички
  • спољни
  • променљив

Размотримо детаљно сваку класу складишта.

Класа аутоматског складиштења

Класа аутоматског (аутоматског) складиштења је подразумевана класа меморије за све локалне променљиве, које су декларисане унутар функције или блока. Кључна реч ауто се ретко користи током писања а Ц ++ програм .



Опсег аутоматских променљивих је унутар функције или блока тамо где су декларисане и не може им се приступити изван те функције или блока. Такође му се може приступити унутар угнежђених блокова у родитељском блоку / функцији у којем је декларисана аутоматска променљива.

Аутоматским променљивим можете приступити изван њиховог опсега помоћу променљиве показивача. Морате да покажете на исто место меморије на коме се налазе променљиве.

Његов животни век је исти као и животни век функције. Кад се изврши функција, променљива се уништава.

Подразумевано им се додељује вредност смећа током декларације.

Синтакса:

тип података вар_наме1 [= вредност]

или

аутоматски тип података вар_наме1 [= вредност]

У горњем примеру, две променљиве су дефинисане са истом класом меморије. Аутоматски се може користити само за дефинисање локалних променљивих, тј. Унутар функција.

Региструјте класу складишта

Као што и само име говори, класа складишта регистра користи се за декларисање променљивих регистра. Сва функционализација променљиве регистра је иста као и аутоматска променљива, осим што преводилац покушава да ове променљиве ускладишти у регистар микропроцесора ако је доступан бесплатни регистар. Ако бесплатан регистар није доступан, они се тада чувају само у меморији.

Дакле, операције на регистрским променљивим су много брже од операција осталих променљивих које се чувају у меморији током извршавања програма.

Генерално, неколико променљивих којима је потребно често приступати у програму декларишу се у класи складишта регистра како би се побољшало време рада програма. Адреса променљиве регистра не може се добити помоћу показивача.

Максимална величина променљиве је једнака величини регистра (тј. Приближно једна реч). На њега не може да се примени унарни оператор „&“, јер нема меморијску локацију.

Синтакса:

региструјте тип података вар_наме1 [= вредност]

Пример:

како да компајлирам јава програм
{регистер инт пи}

Дефинисање „регистра“ не значи да ће променљива бити ускладиштена у регистру. Може се чувати у регистру, овисно о хардверу и ограничењима имплементације.

Погледајмо пример класа регистра и аутоматског складиштења.

Пример:

#инцлуде усинг намеспаце стд // декларисање променљиве која треба да буде екстерна // почетна вредност такође може бити иницијализована у к инт к воид аутоСторагеЦласс () {принтф ('нДемонстратинг ауто цласснн') // декларација ауто променљиве (једноставно // функционише и писање 'инт а = 32') инт нум = 32 // штампање аутоматске променљиве 'а' принтф ('Вредност променљиве' нум '' 'декларисана као ауто:% дн', нум) принтф ( '--------------------------------')} воид регистерСторагеЦласс () {принтф ('нДемонстратинг регистер цласснн') / / декларисање променљиве регистра регистар цхар ц = 'Г' // штампање променљиве регистра 'б' принтф ('Вредност променљиве' ц '' 'декларисана као регистар:% дн', ц) принтф ('---- ---------------------------- ')} инт маин () {// За демонстрацију аутоматске класе складишта аутоСторагеЦласс () // За демонстрацију регистер Класа складишта регистерСторагеЦласс () ретурн 0}

Излаз:

Излаз - класа складишта у Ц ++ - ЕдурекаКласа статичког складишта

Класа статичке меморије се користи за декларисање статичке променљиве . Статичке променљиве чувају своју вредност (тј. Последњу вредност) чак и када су ван њиховог опсега. Статичке променљиве се иницијализују само једном &постоје до прекида програма.

Меморија се додељује само једном статичкој променљивој и нова меморија се не додељује јер се не декларишу поново. Глобалним статичким променљивим може се приступити било где у програму. Компајлер им подразумевано додељује вредност 0.

У Ц ++, када се статички користи на члану података класе, узрокује да сви објекти његове класе деле само једну копију тог члана.

Синтакса:

статички тип података вар_наме1 [= вредност]

Пример:

#инцлуде воид фунцтион (воид) статиц инт ц = 5 // Глобална статичка променљива маин () {вхиле (ц--) {фунцтион ()} ретурн 0} воид фунцтион (воид) {статиц инт цнт = 2 цнт ++ стд :: цоут<< 'cnt is ' << cnt std::cout << ' and c is ' << c << std::endl } 

Излаз:

Класа екстерног складишта

Класа екстерног складишта је потребна када променљиве треба делити у више датотека. Екстерне променљиве имају глобални опсег и оне су видљиве изван датотеке у којој су декларисане. Вањска променљива је видљива свим програмима. Користи се ако две или више датотека деле исту променљиву или функцију.

Животни век спољних променљивих је све док је програм у коме су декларисане окончан. Нормална глобална променљива може се направити и ектерн постављањем кључне речи ‘ектерн’ пре њене декларације / дефиниције у било којој функцији / блоку.

Када користите „екстерн“, променљива се не може иницијализовати, већ само усмерава име променљиве на место за складиштење које је претходно дефинисано.

Синтакса

спољни тип података вар_наме1

Пример

#инцлуде инт цнт ектерн воид врите_ектерн () маин () {цнт = 5 врите_ектерн ()}

Друга датотека: суппорт.цпп

#инцлуде ектерн инт цнт воид врите_ектерн (воид) {стд :: цоут<< 'Count is ' << cnt << std::endl } 

Овде се кључна реч ектерн користи за декларисање цнт-а у другој датотеци. Сада саставите ове две датотеке на следећи начин & минус

$ г ++ маин.цпп суппорт.цпп -о писање

Ово ће створити извршни програм за писање, покушати извршити писање и проверити резултат на следећи начин & минус

$. / писати

преоптерећење функције у примеру ц ++

5

Крећући даље од класе складишта у Ц ++, погледајмо последњу, тј. Променљиву класу меморије.

Променљива класа складишта

Променљиви спецификатор примењује се само на објекте класе, што члану објекта омогућава да замени функцију цонст мембер. Односно, променљиви члан може бити модификован функцијом цонст мембер.

Напокон, погледајмо табелу за упоређивање да бисмо разумели разлике између различитих класа складишта.

Класа складиштења

Кључна реч

Животни век

Видљивост

Почетна вредност

Аутоматски

ауто

Функцијски блок

Локално

Смеће

Спољни

спољни

Цео програм

Глобално

Нула

Статички

статички

Цео програм

Локално

Нула

Регистровати

ансибле вс цхеф вс пуппет

регистровати

Функцијски блок

Локално

Смеће

Променљиво

променљив

Класа

Локално

Смеће

Након проласка кроз горње програме Ц ++, схватили бисте шта су различите класе складиштења у Ц ++ и како их применити. Надам се да је овај блог информативан и да вам додаје додатну вредност.

Тако смо дошли до краја овог чланка о „Класи складиштења у Ц ++“.

Ако желите да сазнате више, погледајте Едурека, поуздана компанија за учење на мрежи. Едурекин курс за обуку и сертификацију Јава Ј2ЕЕ и СОА осмишљен је тако да вас оспособи за основне и напредне Јава концепте, заједно са различитим Јава оквирима попут Хибернате & Спринг.

Имате питање за нас? Молимо вас да га помените у одељку за коментаре овог блога и јавићемо вам се што је пре могуће.