Шта је колекција смећа Ц ++?

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

Мало је језика потребно сакупљачима смећа као дела језика за добру ефикасност. Ови језици се називају језицима сакупљеним смећем. На пример, Јава, Ц # и већина скриптних језика треба сакупљање смећа као део њиховог функционисања. Док језици попут Ц и Ц ++ подржавају ручно управљање меморијом које функционише слично као сакупљачу смећа. Мало је језика који подржавају и прикупљање смећа и ручно управљање додељивањем / бављењем меморијом и у таквим случајевима ће се одвојеном хрпу меморије доделити сакупљачу смећа и ручној меморији.

Неке грешке могу се спречити када се користи метода за одвоз смећа. Као такав:

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

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

Ручно управљање меморијом

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

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

Свака подела меморије са 'нев' мора бити завршена наредбом 'делете'. Ако не, остат ћемо у сјећању.

Да бисте то јасно показали на примеру:

н = нови узорак_објект;
Овде се користи ******* употреба *******
делете н;

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

Али у случају сакупљања смећа, меморија се додељује помоћу 'нев' команде, али је не треба ручно ослободити користећи 'делете'. У таквим случајевима, сакупљач смећа покреће периодично проверавајући слободну меморију. Када комад меморије није уперен ниједним објектом, брише се или ослобађа меморија стварајући више слободног простора за гомилу.

Предности и недостаци ручног управљања меморијом

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

Такође, у случају ручног управљања меморијом, деструктор ће бити позван истог тренутка када позовемо команду 'делете'. Али у случају сакупљача смећа који се не спроводи.

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

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

Предности и недостаци сакупљача смећа

Један главни недостатак сакупљања смећа је укључивање времена или циклуса ЦПУ-а ради проналажења неискориштене меморије и брисања исте, чак и ако корисник зна који меморијски показивач може бити ослобођен, а не користити. Други недостатак је што нећемо знати време када се брише, нити када се позива деструктор.

Алгоритам за прикупљање смећа

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

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

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

Препоручени чланци

Ово је водич за прикупљање смећа Ц ++. Овде смо расправљали о ручном управљању меморијом и алгоритму за прикупљање смећа заједно са предностима и недостацима. Можете и да прођете кроз друге наше предложене чланке да бисте сазнали више -

  1. Конструктор и деструктор на Јави
  2. Ц ++ стринг функције
  3. Деструктор на Јави
  4. Примене Ц ++ у стварном свету
  5. Топ 11 функција и предности Ц ++

Категорија: