operator new, stos

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

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.

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.

0

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

(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.

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.