/ Prečo sú pojmy „automatické“ a „dynamické“ uprednostňované pred pojmami „stack“ a „haldy“ v správe pamäte C ++? - c ++, zásobník, halda, automatické ukladanie

Prečo sú termíny "automatické" a "dynamické" uprednostňované pred termínmi "stack" a "haldy" v správe pamäte C ++? - c ++, stoh, halda, automatické ukladanie

V súvislosti s mnohými otázkami a odpoveďami o SO som sa dozvedel, že je lepšie odkazovať na objekty, ktorých životnosť je riadená skôr ako v automatickom ukladacom priestore, nie v zásobníku.

Dynamicky pridelené objekty by sa nemali označovať ako "s bydliskom na halde, ale v dynamickom ukladaní."

Dostávam, že existuje automatické, dynamické a statické ukladanie, ale nikdy som nepochopil rozdiel medzi automatickým a dynamickým haldy. Prečo sú prví preferovaní?

"Nežiadam o to, čo znamená zásobník / halda alebo ako funguje správa pamäte." Pýtam sa, prečo sú termíny automatické / dynamické ukladanie dát preferované pred termínmi stack / heap.

odpovede:

25 pre odpoveď č. 1

automatický povie mi niečo o živote objektu: konkrétne, že je viazaný automaticky a bude zničený automaticky keď tento rozsah opustí.

dynamický hovorí, že životnosť objektu nie je kontrolovaná automaticky kompilátorom, ale je pod mojou priamou kontrolou.

Stoh je preťažený názov pre typ kontajnera a pre súvisiaci protokol ukazovateľa populárnych inštrukcií podporovaný spoločným call a ret inštrukcie. Nehovorí mi nič o živote objektu, okrem toho, že je to historická asociácia s životnosťou objektu v C, kvôli konvenčným konvenciám rámčekov. Všimnite si tiež, že v niektorých implementáciách je lokálne úložisko vlákien na stoh závitu, ale nie je obmedzený na rozsah akejkoľvek jednotlivej funkcie.

halda je opäť preťažený názov, ktorý označuje buď typ triedeného kontajnera alebo systém riadenia voľného obchodu. Toto je nie len Voľný obchod je k dispozícii na všetkých systémoch, a ani mi nehovorí nič konkrétne o životnosti objektu pridelené new.


8 pre odpoveď č. 2

Väčšina implementácií používa zásobník na zálohovanie objektov s automatickým ukladaním. Štandard to nevyžaduje, ale na väčšine architektúr CPU v týchto dňoch funguje.

Implementácie využívajú rôzne stratégie na zálohovanie objektov s dynamickým trvaním ukladania. Nie som si istý halda je najlepší spôsob, ako opísať, čo moderné pamäťové alokátory používajú, ale zdá sa, že je to "historický" termín.

Automatické / dynamické ukladanie je teda štandard, ktorý štandard používa na klasifikáciu ("abstraktných") životností objektov. To sú správne termíny, ktoré sa majú použiť, ak chcete hovoriť objekty, ako ich popisuje štandard.
Stohy a hromady sú („konkrétne“) implementačné techniky, ktoré sa dajú použiť na ich zálohovanie. Použitie týchto výrazov je menej správne, ak nehovoríte o konkrétnej implementácii.


5 pre odpoveď č. 3

Podmienky automatického / dynamického ukladania sú uprednostňované jednoducho preto, že to vyžaduje štandard. Stack / haldy sú založené na implementácii a môžu byť teoreticky realizované iným spôsobom.


3 pre odpoveď č. 4

Technicky povedané zásobník / haldy súpodrobnosti o implementácii, zatiaľ čo automatické / dynamické ukladanie údajov sú všeobecnejšími pojmami. Samotný štandard neznamená, že alokátor musí používať zásobník / haldu. Preto je automatická / dynamická podmienka vhodnejšia, aj keď osobne považujem tento rozdiel za trochu príliš pedantský.


3 pre odpoveď č. 5

Termíny "statické trvanie ukladania", "automatické trvanie ukladania" a "dynamické ukladanie" sa zobrazujú v štandarde C ++.

Pojmy „zásobník“ a „halda“ sa používajú na označenie funkcií v štandardnej knižnici (stack<>, make_heap(), push_heap()atď.), ktoré majú málo čo do činenia s dobou skladovania.


1 pre odpoveď č. 6

Stack a halda prinášajú do obrazu koncepty súvisiace s implementáciou, zatiaľ čo termíny „automatické“ a „dynamické“ sú všeobecnejšie