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).
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.
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?
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.
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ąć.
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?
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?
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".
"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.