Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Rezerwowanie pamięci przez kompilator

Ostatnio zmodyfikowano 2015-04-10 14:38
Autor Wiadomość
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
C/C++
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?

C/C++
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ęć?
P-130445
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ć.
P-130447
NopeDotAvi
» 2015-04-09 15:25:38
nie ważne czy coś jest lokalne, czy nie, jeżeli jest
new
 ma być
delete

C/C++
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).
P-130449
michal11
» 2015-04-10 13:10:56
@NopeDotAvi

Przeczytałeś w ogóle o co chodzi w pierwszym poście ?
P-130493
NopeDotAvi
» 2015-04-10 14:38:56
nie
P-130508
« 1 »
  Strona 1 z 1