U
Nukularfüsiker schrieb:
Wenn du alles im Speicher halten willst sind das ca. 3 GB, das dürfte auf einem handelsüblichen 32-Bit-System schon knapp werden.
Wenn du auf einem 64-Bit System mit ausreichend Speicher arbeitest, nimm einen std::vector<float> der Größe 10000*10000*8.
Ansonsten halt kleinere Teile laden, verarbeiten, speichern.
Ich würde jedoch trotzdem std::deque nehmen - vor allem, weil du nicht davon ausgehen kannst, 3GB Speicher am Stück zu bekommen - auf nem 32bit OS würde ich von _MAX_ 1-1.5GB ausgeben. Aber selbst auf nem 64bit OS würde ich mich nicht auf über 2-2.5GB verlassen.
Und std::deque ist ja nun nicht so viel langsamer als vector...
Du kannst auch erst mal vector über nen typedef nutzen, damit du es dann ändern kannst, wenn du merkst, dass du die 3GB idR nicht bekommst:
#if 1
# include <vector>
typedef std::vector<float> container_t;
#else
# include <deque>
typedef std::deque<float> container_t;
#endif
#include <iostream>
#include <cstdlib>
int main()
{
try
{
container_t container(/*10*/4*1000*10000*8);
container.push_back( container.size() );
std::cout << container.size() << std::endl;
}
catch(std::exception& e)
{
std::cout << e.what();
}
system("PAUSE");
}
btw: bad_alloc wurde bei mir nicht geworfen(allerdings waren beide Varianten ab 5*.... mit ner Ewigkeit des Wartens(und du brauchst ja 10*....) verbunden(und das ganze System hat nicht mehr reagiert - hab halt nur 4GB RAM - und wenn die voll sind, wirds düster^^ wenn du nicht mind. 8GB RAM hast, kannst du das eh vergessen).
mit der vollen Größe hab ichs dann auch nicht mehr versucht - hab auch nur 4GB an auslagerungsdatei - danach wirds also noch mal langsamer, wenn zu der langsamen festplatte auch noch defragmentierung kommt, weil Windows wohl kaum >4GB SPeicher am Stück (zumindest hier^^) finden wird
Da kannst du gleich mal gucken, ob du performance-technisch überhaupt Unterschiede spüren kannst - wenn ja, kannst du sie messen und dich dann noch immer entscheiden.
bb
PS: war ja schon ein wenig enttäuscht, dass der MSVC(10) das hier nicht mehr wegoptimieren kann... War fest davon ausgegangen, dass ich eh noch x Zeilen einbauen muss, nur damit er den vector/die deque nicht wegoptimiert.