operator new, stos

operator new, stos
AN
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 6 lat
  • Postów:62
0

Cześć
Chciałbym dowiedzieć się gdzie będą składowane zmienne z klasy na podstawie której zrobie obiekt operatorem new.
Czy będzie to stos aplikacji czy jakiś inny obszar pamięci?
Przykład

Kopiuj
class Test
{
public:
	char tab[1024];
};

int main()
{
	Test  * qq;
	qq = new Test();
	return 0;
}

Gdzie znajdzie się tablica tab?
Wydaje mi się, że skoro obiekt tworzę operatorem new to wszystkie jego składniki powinny być zapisane w pamięci, a nie na stosie aplikacji.

Patryk27
A stos to nie jest pamięć?
_13th_Dragon
@Patryk27, bo dzieciakom często tłumaczą że stos to jak studnia, wrzucasz tam cegły a potem wydobyć możesz tylko ostatnio wrzuconą. Dla tego niektóry myślą że jak się mówi - "na stosie", to się ma na myśli że na tych cegłach.
Sarrus
  • Rejestracja:prawie 14 lat
  • Ostatnio:dzień
  • Postów:2512
0

Jeżeli obiekt jest tworzony dynamicznie, to dane te znajdą się na stercie, a wskaźnik do obiektu na stosie. Jeżeli obiekt jest np. lokalny w funkcji to najpewniej dane te również znajdą się na stosie.

edytowany 1x, ostatnio: Sarrus
Loganek
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 8 lat
  • Postów:268
0

tak, wszystkie jej składniki, znajdują się w pamięci. Dowodem na to jest zrzut z gdb:

Kopiuj
(gdb) print qq
$11 = (Test *) 0x804a008
(gdb) print &(qq->tab)
$12 = (char (*)[1024]) 0x804a008
(gdb) print &qq
$13 = (Test **) 0xbffff1bc

zmienna lokalna qq znajduje się na stosie, natomiast wskazuje ona na pamięć sterty. Tablica również znajduje się na stercie.


AN
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 6 lat
  • Postów:62
0

Dzięki za pomoc i wyjaśnienie :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.