Ц Програмирање

КАКО КОРИСТИТИ ФУНКЦИЈУ МАЛЛОЦ У Ц

КАКО КОРИСТИТИ ФУНКЦИЈУ МАЛЛОЦ У Ц
Маллоц је уграђена функција декларисана у заглавној датотеци . Маллоц је скраћени назив за 'алокацију меморије' и користи се за динамичко додељивање једног великог блока суседне меморије према наведеној величини. Постоје две врсте додељивања меморије статичка и динамичка. Додела статичке меморије врши се у време компајлирања и не мења се током извођења. Динамичко додељивање меморије за то додељује меморију током извршавања; користимо маллоц. Сада је ствар у томе одакле долази ова меморија, тако да су сви динамички захтеви у Ц испуњени из гомиле меморије. У основи, наша апликација / програм имаће 3 врсте меморије

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

Синтакса:

Синтакса маллоц је (воид *) маллоц (сизе_т сизе). Дакле, синтакса каже да маллоц захтева величину, вратит ће показивач у основи воид показивач и величина т је дефинирана у као непотписани цели број. Функција Маллоц једноставно додељује меморијски блок према величини наведеној у хрпи, као што видите у синтакси да треба навести величину, а након успеха враћа показивач који показује на први бајт додељене меморије, а иначе враћа НУЛЛ. Дакле, посао маллоц-а је да додели меморију током времена извођења.

Зашто поништити показивач:

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

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

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

Пример програма:

Ево једноставног примера програма како бисмо на прави начин разумели концепт маллоц-а.

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

Ако показивач садржи НУЛЛ, то значи да меморија није доступна. Тако ћемо једноставно изаћи из програма са статусом неуспешног изласка. Ако то није случај, можемо лако покренути фор петљу.

Петља ће се изводити од 0 до н-1, а ми ћемо тражити од корисника да сваки пут унесе цели број један по један. Унутар функције сцанф постоји једна ствар написана птр + и, јер знамо да птр садржи адресу првог бајта меморије. Рецимо да је адреса овде 1000, и у почетку је једнако нули, тако да је 1000 + 0 1000, тако да ће унутар те адресе бити сачуван наш први цео број, а након тога када постане 1 тако 1000 + 1 што је интерно протумачено као (1000) +1 * 4 ако претпоставим да је величина целог броја 4 бајта, и то би било једнако 1004, па ће следећи цели број бити ускладиштен на локацији 1004. И ово ће се наставити на овај начин адресе су попут 1000, 1004, 1008 и тако даље. Не користимо амперсанд пре птр + и, јер нам птр већ даје адресу када пишемо птр, што је једноставно показивач и садржи адресу, а не вредност, тако да нема потребе за стављањем амперсанда испред, и овај концепт би требао бити јасан.

Овде у овој петљи, ми једноставно радимо једну ствар, исписујемо све целе бројеве на екрану; очигледно користимо птр + и, али овде, у овом случају, преусмеравамо је, јер птр + и представља адресу, па је морамо дереференцирати. Ако је једнако 0, биће 1000, јер претпостављамо да ће прва адреса бити 1000, па је преусмеравамо; добићемо први цели број тада и једнак 1, и постаће 1001, али ће се протумачити као 1004 ако је величина целог броја 4. Опет. Преусмеравамо га, па ће нам дати 2нд цео број. На овај начин све функционише.

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

Прво тражимо од корисника да унесе број целих бројева, а затим корисник уноси целе бројеве и ми их једноставно приказујемо на екрану.

Закључак:

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

Срећна динамичка додела меморије!

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