|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
[c++] vantaggi allocazione dinamica
Ho dei dubbi..ho cercato un po in giro ma ho trovato notizie che mi hanno confuso..
Le domande sono perché e quando scegliere di allocare dinamicamente una matrice?! Cioe quali sono i vantaggi? (e gli svantaggi)?! In memoria costa meno una matrice dinamica di una statica? Inoltre come si alloca una matrice dinamica? Non trovo risposta da nessuna parte. Help me.. Inviato dal mio GT-I9003 usando Tapatalk Ultima modifica di mistergks : 30-11-2012 alle 11:40. |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Jan 2008
Città: Roma
Messaggi: 126
|
A grandi linee
Fondamentalmente usi un'allocazione dinamica di un'array quando non puoi definire la la grandezza se non a runtime. Lo svantaggio principale e' che per gestire un'allocazione dinamica dovrai scrivere del codice per "gestire" il puntatore alla matrice creata. Considera che in c++ ti puoi appoggiare a classi che ti mascherano gran parte del lavoro di gestione ovviamente un'allocazione dinamica ottimizza l'occupazione di memoria, xche' puoi utilizzare esattamente la quantita' che ti occorre. Pensa un wordprocessor. aprendo un foglio bianco non sai ne quante righe scriverai e neppure di che lunghezza. puoi optare x dei limiti preimpostati (rigcol[100][100]; ovvero 100 righe da 100 caratteri) oppure allocare dinamicamente di volta in volta sia la quantita di righe che la loro lunghezza. Quindi se apro un foglio e scrivo solo "A" nel caso statico alloco 100x100=10000byte mentre nel caso dinamico alloco 1byte.... per allocare usi : c++ ->>> new() c ->>> malloc() Spero di essere stato chiaro.... ![]()
__________________
La forza dei forti sta nel traversare le traversie con occhio sereno! (PK) ... ![]() I computer sono esattamente come gli esseri umani: fanno qualsiasi cosa tranne che pensare. (John Van Neumann) Siamo brevi, il mondo è sovraffollato di parole. (Stanisław Jerzy Lec) |
![]() |
![]() |
![]() |
#3 | |
Moderatore
Iscritto dal: Nov 2006
Messaggi: 21816
|
Quote:
Inoltre lo stack ha una dimenisone definita a priori ed è << della memoria utilizzabile nel sistema
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX) Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000 |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
Solo new?!???
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
Che vuol dire "solo new" ?
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
|
Bisogna ricordare inoltre che, generalmente, l'allocazione dinamica (quando comincia ad essere intensiva) risulta prestazionalmente molto inferiore nel C++ che non in linguaggi con garbage collector come C# o Java, per il principio stesso che sta dietro all'allocazione e deallocazione della memoria.
In genere comunque quando puoi alloca sempre staticamente, lo stack per concezione stessa è estremamente più rapido prestazionalmente. Certo, questi son principi generali, poi in realtà le considerazioni da fare sono davvero molte e dipendono dall'applicazione. |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
|
![]() |
![]() |
![]() |
#8 | |
Member
Iscritto dal: Jan 2008
Città: Roma
Messaggi: 126
|
Quote:
http://www.cplusplus.com/reference/new/operator%20new[]/ http://it.wikipedia.org/wiki/Array_in_C%2B%2B Su wiki puoi trovare anche info su stack ed heap...
__________________
La forza dei forti sta nel traversare le traversie con occhio sereno! (PK) ... ![]() I computer sono esattamente come gli esseri umani: fanno qualsiasi cosa tranne che pensare. (John Van Neumann) Siamo brevi, il mondo è sovraffollato di parole. (Stanisław Jerzy Lec) |
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
Quote:
For (int i=0; i<100; i++) Array[i]=new int [n]; Va dichiarato ogni elemento quindi ? Inviato dal mio GT-I9003 usando Tapatalk |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
|
Con quel for genera 100 array di int di dimensione n, e li associa uno per uno alla posizione i-esima di quell'array di puntatori a int. (ogni puntatore quindi punterà alla prima posizione di uno di quei 100 array di int).
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Per non parlare dei problemi del .Net a gestire il Large Object Heap. Anche nel mondo managed esistono i problemi di gestione della memoria... |
|
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
|
Quote:
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:23.