Ano at saan ang stack at ang magbunton?

Ipinapaliwanag ng mga aklat sa mga wika ng programming na ang mga uri ng halaga ay nilikha sa stack , at ang mga uri ng sanggunian ay nilikha sa heap , nang hindi nagpapaliwanag kung ano ang dalawang bagay na ito. Hindi ko nabasa ang isang malinaw na paliwanag para dito. Nauunawaan ko kung ano ang isang stack. Ngunit

  • kung saan at ano ang mga ito (pisikal na tunay na memory ng computer)?
  • Sa anong kadahilanan ang mga ito ay kinokontrol ng operating system o wika?
  • Ano ang kani>
  • Ano ang tumutukoy sa laki ng bawat isa sa kanila?
  • Ano ang mas mabilis?
7380
17 сент. itakda ang mattshane 17 sep . 2008-09-17 07:18 '08 at 7:18 am 2008-09-17 07:18
@ 25 sagot

Ang isang stack ay isang memorya na itinabi bi>

Ang isang magbunton ay isang memorya na inilalaan para sa dynamic na paglalaan. Hindi tulad ng stack, wa>

Ang bawat thread ay tumatanggap ng isang stack, habang para sa isang application lamang ng isang magbunton ay karaniwang ginagamit (bagaman ito ay hindi bihira na magkaroon ng i>

Upang direktang sagutin ang iyong mga tanong:

Sa anong kadahilanan ang mga ito ay kinokontrol ng operating system o wika?

Nagbibigay ang OS ng isang stack para sa bawat thread sa antas ng system kapag lumilikha ng isang thread. Karaniwan, ang OS ay tinatawag sa pamamagitan ng kapaligiran ng pagpapatupad ng wika upang maglaan ng isang kimpal para sa isang application.

Ano ang kani>

Ang stack ay naka-attach sa thread, kaya kapag ang thread ay lumabas ng stack, ito ay naitama. Ang isang magbunton ay karaniwang inilalaan kapag ang application ay inilunsad sa run time at bumalik pagkatapos ng application (teknikal na proseso) labasan.

Ano ang tumutukoy sa laki ng bawat isa sa kanila?

Ang laki ng stack ay naka-set kapag lumilikha ng isang thread. Ang laki ng heap ay naka-set kapag ang application ay nagsimula, ngunit maaaring tumaas kung kinakai>

Ano ang mas mabilis?

Ang stack ay mas mabilis dahil ang pattern ng pag-access ay ginagawang wa>

I-clear ang pagpapakita: 2019

5436
17 сент. Ang sagot ay binigyan ng Jeff Hill 17 sep. 2008-09-17 07:52 '08 at 7:52 am 2008-09-17 07:52

Stack

  • Nai-save sa RAM ng computer, bi>
  • Ang mga variable na nilikha sa stack ay lumabas ng saklaw at awtomatikong napalaya.
  • Mas mabilis na maglaan kumpara sa mga variable sa heap.
  • Ipinatupad ang aktwal na stack data structure.
  • Makakatipid ng lokal na data, nagbalik ng mga address na ginagamit upang pumasa sa mga parameter.
  • Maaaring magkaroon ng isang stack overflow kapag masyadong maraming ng stack ay ginagamit (karamihan mula sa wa>
  • Ang data na nilikha sa stack ay maaaring gamitin nang wa>
  • Gagamitin mo ang stack kung alam mo nang eksakto kung magkano ang data na kai>
  • Karaniwan ang maximum na sukat ay natukoy na kapag nagsimula ang iyong programa.

Heap:

border=0
  • Naka-imbak sa memorya ng computer sa parehong paraan tulad ng stack.
  • Sa C ++, ang mga variable sa heap ay dapat na manirahan nang manu-mano at hindi mawawala sa saklaw. Ang data ay napalaya na delete , delete[] o free .
  • Ito ay mas mabagal upang maglaan kumpara sa mga variable sa stack.
  • Ginagamit sa demand upang maglaan ng isang bloke ng data para sa paggamit ng programa.
  • Maaaring magkaroon ng fragmentation kapag mayroong maraming mga paglalaan at exemptions.
  • Sa C ++ o C, ang data na nilikha sa heap ay ipinapahiwatig ng mga payo at inilalaan sa new o malloc ayon sa pagkakabanggit.
  • Maaaring magkaroon ng pagkabigo na ipamahagi kung kinakai>
  • Gusto mong gumamit ng isang grupo kung hindi mo alam kung gaano karaming data ang kai>
  • Responsable para sa pagtagas ng memory.

Halimbawa:

2164
17 сент. Ang sagot ay ibinigay sa pamamagitan ng Brian R. Bondy 17 Septiyembre. 2008-09-17 07:20 '08 at 7:20 2008-09-17 07:20

Ang pinakamahalagang punto ay ang heap at stack ay mga pangkalahatang tuntunin para sa mga pamamaraan sa paglalaan ng memorya. Maaari itong ipatupad sa iba't ibang paraan, at ang mga katagang ito ay naaangkop sa mga pangunahing konsepto.

  • Sa stack ng mga elemento, ang mga elemento ay nakalagay sa isa sa ibabaw ng isa pa sa pagkakasunud-sunod kung saan sila inilagay doon, at maaari mo lamang alisin ang tuktok na bahagi (nang wa>

    2019

1294
19 марта '09 в 17:38 2009-03-19 17:38 ang sagot ay ibinigay sa pamamagitan ng thomasrutter

(Inilipat ko ang sagot na ito mula sa isa pang tanong na mas marami o mas kaunti sa pamamagitan nito.)

Ang sagot sa iyong katanungan ay tiyak na pagpapatupad at maaaring mag-iba-iba sa mga compiler at processor architecture. Gayunpaman, ito ay isang pinasimple na paliwanag.

  • Ang parehong stack at ang magbunton ay mga lugar ng memorya na inilalaan mula sa base operating system (kadalasang virtual na memory, na kung saan ay naka-map sa pisikal na memorya sa demand).
  • Sa isang multi-threaded na kapaligiran, ang bawat thread ay magkakaroon ng sarili nitong ganap na independiyenteng stack, ngunit sila ay hatiin ang magbunton. Dapat na kontrolado ang parallel access sa heap at hindi posible sa stack.

Isang pile

  • Ang heap ay naglalaman ng naka-link na listahan ng mga ginamit at libreng mga bloke. Ang mga bagong allocation ng tambak ( new o malloc ) ay nasiyahan sa paglikha ng angkop na bloke mula sa isa sa mga libreng bloke. Nangangai>
  • Habang tumutubo ang heap, ang mga bagong bloke ay madalas na inilaan mula sa mas mababang mga address sa mas mataas na mga address. Kaya, maaari mong isipin ang isang bunton bi>
  • Ang paglalaan at pagpapalaya ng maraming maliliit na bloke ay maaaring mag-iwan ng isang pile sa isang estado kung saan maraming mga maliliit na libreng bloke na sinanib sa pagitan ng mga bloke na ginamit. Maaaring mabigo ang kahilingan para sa paglalaan ng isang malaking bloke, dahil wa>
  • Kapag ang isang ginamit na bloke na nasa tabi ng isang libreng bloke ay inilabas, isang bagong libreng bloke ay maaaring isama sa isang katabing libreng block upang lumikha ng isang mas malaking libreng bloke na epektibong binabawasan ang paghihiwalay ng heap.

2019

681
31 июля '09 в 18:54 2009-07-31 18:54 Sagot ay ibinigay sa pamamagitan ng Martin Liversage Hulyo 31, 2009 sa 18:54 2009-07-31 18:54

Sa sumusunod na code C #

Разница между распределением памяти стек и кучи "timmurphy.org