max_size() aus std::vector & co...
-
hi,
was genau gibt die funktion max_size() aus std::vector, std::list, std::deque an?
bedeutet das es können so viele objekte gespeichert werden, oder muss man noch die größe der einzelnen objekte (size of) mal nehmen?
T H A N K S, für euch Mühe!!
JO_JO
-
-
also egal wie groß die elemente sind max_size() ist immer gleich?
wie bekomme ich die wirkliche anzahl der elemente raus?
Oder ist das die wirkliche Anzahl der Elemente?
-
das ist jetzt keine c++ frage, aber:
mein programm speichert eine große anzahl von elementen, wenn ich es ausführe reagiert mein computer nicht mehr richtig bzw ganz langsam/verzögert..
bedeutet dass das der arbeitsspeicher voll ausgelastet ist?
sorry ich kenn mich mit den hintergründen nicht richitg aus, kann mir das jemand erklären?THANKS, jo_jo
-
jo_jo schrieb:
mein programm speichert eine große anzahl von elementen, wenn ich es ausführe reagiert mein computer nicht mehr richtig bzw ganz langsam/verzögert..
bedeutet dass das der arbeitsspeicher voll ausgelastet ist?Ist möglich, dass dann der Speicher auf die Festplatte ausgelagert werden muss, was langsam ist. Es kann aber auch sein, dass das Problem anderswo liegt, aber ohne Code kann man nur raten.
-
hängt da mit dynamischen speicher zusammen?
wenn ich mit new erstelle wird das dann wo anderes gepeichert?
ich benutze kein new, wo wird das dann gespeichert? Kann der Compi dann auch langsam werden?
Sorry für mein Unwissen, irgendwie hängt doch alles wieder zusammen...
-
Die STL-Container arbeiten intern mit
newunddelete(zumindest, sofern du keinen eigenen Allokator angegeben hast). Speicher, der mitnewangefordert wird, landet auf dem Freestore, einem speziellen Bereich für dynamischen Speicher. Oft wird auch von Heap gesprochen, aber das ist eigentlich nicht ganz korrekt.
-
jo_jo schrieb:
also egal wie groß die elemente sind max_size() ist immer gleich?
Nein. Es wird eine Abschätzung gemacht. Meistens etwas in der Art von:
std::size_t(-1) / sizeof(T)Diese Abschätzung hat aber überhaupt nichts mit der aktuellen Anzahl an Elementen im Container zu tun. Es ist halt einfach ein Wert, wieviele Elemente man theoretisch in diesen Container speichern könnte. Ein sehr theoretischer Wert, welcher meistens nichts mit der Realität zu tun hat.
jo_jo schrieb:
wie bekomme ich die wirkliche anzahl der elemente raus?
Oder ist das die wirkliche Anzahl der Elemente?Die aktuelle Anzahl Elemente im Container bekommst du über
std::vector::sizeheraus.Grüssli
-
Ein sehr theoretischer Wert, welcher meistens nichts mit der Realität zu tun hat.
Sind es eher mehr oder weniger?
-
jo_jo schrieb:
Ein sehr theoretischer Wert, welcher meistens nichts mit der Realität zu tun hat.
Sind es eher mehr oder weniger?
Deutlich weniger. Das Problem liegt allerdings nicht an
std::vector, sondern daran dass du Speicher anderweitig verwendest. Der Wert bedeutet daher meistens, als wenn dein ganzes Programm nur aus einemstd::vectorbesteht. Du also überhaupt keinen anderen dynamischen Speicher verwendest. Eher unrealistisch, nicht?
Grüssli