Grossen Speicherblock anfordern
-
antword schrieb:
new char[123456789000000000000000000000000000];Mal abgesehen davon das die Zahl so gar nicht verwendet werden kann, möchte ich doch gerne mal deinen PC haben :p (soviel RAM oder so ne so große Platte (wenn er dann auslagert))
BR
Vinzenz
-
Hm hab mich wohl unklar ausgedrückt.
Sollen ja nicht nur chars rein, sondern auch andere Datentypen.
Kann ich da trotzdem mit Pointerarithmetik arbeiten?
Das gecaste unter C++ ist ja...ein Thema für sich..
-
du kannst ruhig chars anfordern und dann da ints reinfeuern. Kannst auch pointerarithmetik und alles drauf anwenden
je nachdem wohin du das castest
-
Hm, also für solche Zwecke würde ich dann eher die Funktion std::get_temporary_buffer bzw, die Klasse std::temporary_buffer aus <memory> empfehlen.
-
Eigentlich sollte hier std::vector<Typ> reichen.
std::vector<Typ> vec;
vec.reserve(100000000);
-
Oder einfach einen dynamischen Vector benutzen!
Sobald zu wenig Speicherplatz vorhanden ist, wird der Vector automatisch an einen ausreichend großen Bereich transferiert,
womit dein Problem eigentlich gelöst wäre.
Um die Reservierung von Speicherplatz brauchst du dich dann nicht mehr zu kümmern
Grüße, Bobby - Karle
-
Wieso forderst Du Speicher nicht erst dann an, wenn Du ihn brauchst? Gerade, wenn man viel Speicher benötigt, ist es ratsam mit dieser Ressource nicht allzu großzügig umzugehen.
-
Speicher
er schrieb:...
Das gecaste unter C++ ist ja...ein Thema für sich..Ehrlich gesagt: Wenn Du die Typsicherheit von C++ eher als Last empfindest, solltest Du ganz auf sie verzichten und ganz "C-mäßig" mit malloc(), free(), structs und Co. arbeiten.
Jetzt "rumzumixen" bringt nur Probleme mit sich und suggeriert Dir vielleicht eine Sicherheit, die's nicht gibt.Gruß,
Simon2.
-
Noch etwas:
Du kannst einen Vector auch "vordimensionieren" (entweder über .reserve() oder schon im Konstruktor). Dann sparst du dir etliche automatische Redimensionierungen, wenn du schon im Voraus weisst, das du viel Speicher brauchen wirst.
-
Sid2K6 schrieb:
Du kannst einen Vector auch "vordimensionieren" (entweder über .reserve() oder schon im Konstruktor).
Aber denk daran, daß es einen Unterschied zwischen den beiden Varianten gibt - reserve() holt sich genug Speicher, füllt ihn aber nicht mit Werten, der Konstruktor (und resize()) füllt den Vector mit entsprechend vielen Werten.