Rezerwowanie pamięci przez kompilator
Ostatnio zmodyfikowano 2015-04-10 14:38
dek12 Temat założony przez niniejszego użytkownika |
Rezerwowanie pamięci przez kompilator » 2015-04-09 13:55:08 jak to jest z tą rezerwacją pamięci. Wiadomo, że jak mamy np main() { int x; char c; return 0; }
no to kompilator zarezerwuje pamięć dla tych dwóch zmiennych. Gdy dajemy zmienne dynamiczne no to pamięć lokuje się w innej pamięci, tak? Którą można alokować w czasie działania programu. a co w takim przypadku? switch( numer ) { case 1: { cout << "wybrales algorytm TCBH"; GNR obiekt2( 2 ); break; } case 2: { cout << "wybrales algorytm ADPFH"; cout << "algorytm pokazuje srednie natezenie w poszczegolnych godzinach doby" << endl; GNR obiekt3( 3 ); break; } case 3: { cout << "wybrales algorytm ADPQH" << endl; GNR obiekt1( 1 ); break; } } albo jak słusznie pefkos zwrócił uwagę, zmienna lokalna jakiejś funkcji, która może nie zostać użyta. Jak wtedy kompilator rezerwuje pamięć? |
|
Monika90 |
» 2015-04-09 14:15:43 Kompilator nie rezerwuje pamięci, kompilator generuje kod, który w czasie działania programu będzie alokował i zwalniał pamięć w zależności od potrzeb. W przypadku zmiennych lokalnych (tak naprawdę automatycznych) ta pamięć będzie alokowana na stosie. Jeżeli wykonywanie programu dojdzie do punktu w którym jest deklaracja zmiennej lokalnej to zostanie przydzielona dla niej pamięć, a przy wyjściu z bloku {}, w którym ta zmienna się znajduje, pamięć zostanie zwolniona.
To jest uproszczenie, ale na razie musi Ci to wystarczyć.
|
|
NopeDotAvi |
» 2015-04-09 15:25:38 nie ważne czy coś jest lokalne, czy nie, jeżeli jest new ma być delete void foo( int size ) { int * a = new int[ size ]; }
jeżeli nie usuniesz będziesz miał wyciek pamięci. W takim momencie masz wskaźnik (alokowany na stosie), ale bajty danych są alokowane na stercie/kopcu/heap (nie znam poprawnego tłumaczenia). |
|
michal11 |
» 2015-04-10 13:10:56 @NopeDotAvi
Przeczytałeś w ogóle o co chodzi w pierwszym poście ? |
|
NopeDotAvi |
» 2015-04-10 14:38:56 nie |
|
« 1 » |