Frage zu Speicherverteilung eines vector
-
Hallo!
Ich hab ein Verständnisproblem und hoffe ihr könnt mir weiterhelfen.
Ich nutze einen vector<bool> für eine kleine Simulation, wobei dieser vector sehr groß werden kann (wird gleich beim kompilieren in fester Größe angelegt).
Auf diesem vector führe ich in einer Schleife Operationen aus, also Lesen und Schreiben beliebiger Elemente. Ist der vector kleiner als der RAM (4 GB) schaffe ich ca. 12.000 Schleifendurchläufe pro Sekunde.
Jetzt wollte ich testen wie schnell es noch geht wenn der vector nicht mehr in den Arbeitsspeicher passt und habe einen 10GB vector erstellt. Nachdem es am Anfang wie erwartet langsamer lief, begann sich die Ausführung nach etwa 10^5 Schleifendurchläufen zu beschleunigen und geht nun wieder gegen 12.000 pro Sekunde.
Schaue ich mir im Task-Manager die Leistung an, liegen 11 GB in der Auslagerungsdatei, 3,8 GB im RAM (vor Programmstart etwa 1 GB). Die Prozessorauslastung des ersten Kerns liegt bei 100% in beiden Fällen (große und kleine Zelle), wobei sie bei der großen Zelle am Anfang starke Oszillationen aufweist.Nun die eigentliche Frage: Ich dachte ein vector legt einen zusammenhängenden Speicherbereich an. Warum splittet der sich jedoch offenbar auf den Arbeitsspeicher und die Festplatte auf?!
Was genau passiert da?Ich bin nicht unbedingt böse, dass das passiert - ich verstehs nur nicht.
Weitere Infos:
AMD Quadcore CPU
alte HDD
kein ReadyBoost
Win7 64bit
MSVS 2010 Ultimate
Codeoptimierung "Geschwindigkeit maximieren" (/O3)Klärt mich bitte auf!

Viele Grüße
Uranhexafluorid
-
Schon mal darueber nachgedacht, was eine Auslagerungsdatei ist? Oder Working space eines Prozesses ist?
-
-
Erstmal danke euch beiden - irgendwie ging ich davon aus, dass ein vector wirklich zusammenhängenden Speicher auf einem Medium belegt...
Habe mir über die Abläufe dahinter nicht wirklich Gedanken gemacht bis jetzt - wäre wohl angebracht gewesen bevor ich hier frage. Sorry!Trotzdem ist mir nich klar warum es immernoch quasi genauso schnell läuft, wie wenn nichts ausgelagert werden muss. Ich greife ja im Prinzip zufällig auf den vector zu.
-
Ich greife ja im Prinzip zufällig auf den vector zu.
Das kann ich von hier aus nicht verifizieren. Vielleicht ist der Compiler auch so schlau und ersetzt deinen vector<bool> durch etwas magisches. Das kann der.
-
Ah ok, der Compiler wandelt meinen, wahrscheinlich grottigen, Code in was magisches um, was viel besser ist.
Naja, mir solls egal sein, Hauptsache es kommt das raus, was rauskommen soll...Danke nochmal!