Wskaźnik, a zmienna na stosie. Pytanie w przypadku zastosowania w strukturze danych.

0

Witam. Przeszukałem masę wątków na stackoverflow, lecz nie nie znalazłem tam konkretnej odpowiedzi. Mam pewną zagwozdkę co do pól w klasie, która będzie strukturą danych. Powiedzmy np klasa Node, która ma pola prev, next oraz data. Prev oraz Next będą wskaźnikami na 100%, gdyż muszą wskazywać na null w razie takiego przypadku. Lecz jak sprawa będzie wyglądała wobec pola, które będzie musiało przechować jakąś daną? Czy lepiej wykorzystać np. wskaźnik (int* data), czy zmienną na stosie (int data).

3

Położenie tej zmiennej z danymi w przypadku takiej deklaracji będzie zależeć od położenia całej struktury, niekoniecznie na stosie, to raz. Dwa: to zależy co to za dane. Jeśli znasz z góry ich rozmiar to wtedy pytanie brzmi: gdzie chcesz alokować te struktury? Bo jeśli chcesz same struktury mieć na stosie a dane maja spory rozmiar, to lepiej alokować te dane na stercie a w strukturze mieć tylko pointer. Ale jeśli same struktury i tak alokujesz na stercie dynamicznie, to nie ma sensu utrudniać życia (sobie i cpu) robiąc kolejny poziom pośredniosci.

0
Shalom napisał(a):

Położenie tej zmiennej z danymi w przypadku takiej deklaracji będzie zależeć od położenia całej struktury, niekoniecznie na stosie, to raz. Dwa: to zależy co to za dane. Jeśli znasz z góry ich rozmiar to wtedy pytanie brzmi: gdzie chcesz alokować te struktury? Bo jeśli chcesz same struktury mieć na stosie a dane maja spory rozmiar, to lepiej alokować te dane na stercie a w strukturze mieć tylko pointer. Ale jeśli same struktury i tak alokujesz na stercie dynamicznie, to nie ma sensu utrudniać życia (sobie i cpu) robiąc kolejny poziom pośredniosci.

Czyli rozumiem, że gdybym za pomoca funkcji add(), dodawal kolejne dane do wezlow, najlepiej aby były one na stosie, bez wskaznika, tak?

2

W najogólnieszym przypadku Masz:

template <typename T>
class List {
	size_t N; // -> rozmiar
	struct Node * root;
	struct Node {
		T data;
		struct Node * next;
		struct Node * parent;
	};
};

plus konstruktory, destkrukor, copy, move, i tak dalej... Gdzie Chcesz to alokować, oczywiście, że to będzie na stercie.

0

Czyli rozumiem, że gdybym za pomoca funkcji add(), dodawal kolejne dane do wezlow, najlepiej aby były one na stosie, bez wskaznika, tak?

Nie. Czy ty w ogóle rozumiesz co to jest stos? Bo mam wrażenie ze nie... Napisz konkretnie co chcesz osiągnąć.

0
Shalom napisał(a):

Czyli rozumiem, że gdybym za pomoca funkcji add(), dodawal kolejne dane do wezlow, najlepiej aby były one na stosie, bez wskaznika, tak?

Nie. Czy ty w ogóle rozumiesz co to jest stos? Bo mam wrażenie ze nie... Napisz konkretnie co chcesz osiągnąć.

Bardzo możliwe, że mylę pojęcia, gdyż dopiero się w to zagłbiam. W skrócie, mam funkcje add, która doda pewną liczbę, np 5 w parametrze. Co jest bardziej optymalne, zapisać ją do wskaznika, czy na "Zwykla" zmienna?

0

Bardzo możliwe, że mylę pojęcia, gdyż dopiero się w to zagłbiam. W skrócie, mam funkcje add, która doda pewną liczbę, np 5 w parametrze. Co jest bardziej optymalne, zapisać ją do wskaznika, czy na > "Zwykla" zmienna?

A po polsku, o co chodzi?

0
lion137 napisał(a):

Bardzo możliwe, że mylę pojęcia, gdyż dopiero się w to zagłbiam. W skrócie, mam funkcje add, która doda pewną liczbę, np 5 w parametrze. Co jest bardziej optymalne, zapisać ją do wskaznika, czy na > "Zwykla" zmienna?

A po polsku, o co chodzi?

"Zwykla" zmienna, w sensie np "int p".

3

"Zwykla" zmienna, w sensie np "int p".

class A{
    int x;
};

int y;

int main(){
    int z;
    A* a = new A();
    return 0;
}

Mamy tutaj teraz trzy razy deklaracje int ... i w każdym przypadku zmienna pojawi się w innym obszarze pamięci i tylko jedna z nich będzie faktycznie leżeć na stosie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1