Daten Import Crash
-
Bitte ein Bit schrieb:
Ähh, hat es einen Grund warum du keine STL benutzen willst? Verhindert Speicherlecks, also vermutlich genau dein Problem.
Denn hier muss ich danz dumm fragen. Wer räumt denn den Rückgabewert char* auf? Wer ist zuständig für die Freigabe?
Ansonsten schau dir mal mittels ProcessExplorer deinen Prozess (Working Set und Private Bytes) an. Mittels DebugDiag kann man übrigens Speicherfehler finden.
Ja der Grund ist, weil das mehr oder weniger so eine Schnittstelle zwischen Anwendung und den Steuergeräten ist...
Da ist reines STL nicht drin,... da muss man auf etwas C zurückgreifen.Für die Freigabe sind mehrere andere Funktionen zuständig, aber die sollten alle passen, hab alles auch schon mit 'VisualLeakDetector' und anderen eigenen Softwaretest nach Memory Leaks abgesucht...
Daher nehme ich an, dass keine Speicherlöcher entstehen.Meine Vermutung, ....
kann es sein, dass Windows dich nicht auf 100% des virtuellen Memorys zugreifen lässt, da er z.B. sicherheitshalber 3% - 6% auf Reserve lässt?
Und ich deswegen mit den 154MB schon an der Grenze bin?
-
Schreib Dir doch mal etwas Code (nach Jeffrey Richter), dass Dir die Nutzung des aktuellen Prozesspeichers ausgibt.
Wenn das nicht hilft schau Dir die Heaps mit WinDbg an.
-
Erneut vielen Dank für die fixen und doch sehr hilfreichen Antworten.
Jeffrey Richter sagt mir zwar nichts, aber ich werd mich mal
umgehend informieren und werde höchstwahrscheinlich direkt
damit testen!
-
Du kennst Jeffrey Richter "Advanced Windows" nicht? Dann hast Du was verpasst.
Ich spiele auf VMMAP an... aber das geht teilweise auch in WinDbg!
Es gibt auch das Sysinternals Tool!
-
Also erstmal sagt ja die Ausgabe des freien Speichers gar nichts über den freien virtuellen Speicher des Prozesses aus. Du hast ja eine 32Bit Anwendung, daher könnte es im ungünstigen Fall sein, dass dein Rechner von seinen 12GB Speicher noch 8GB Speicher frei hat, aber davon nichts mehr dem Prozess zur Verfügung gestellt werden kann, weil dieser seine 4GB Adressraum bereits nutzt.
Es wäre daher viel interessanter mal mitzuloggen, wie groß der zusammenhängend angeforderte Speicherbereich ist.
-
Dein Speicherverbauch würde mich jetzt (wie andere auch) interresieren.
Nicht dass du auf den Gedanken kommst sehr viel Speicher reservieren zu wollen obwohl du unter Win32 prinzipiell nur 2GByte zur Verfügung hast...
-
Morle schrieb:
Also erstmal sagt ja die Ausgabe des freien Speichers gar nichts über den freien virtuellen Speicher des Prozesses aus. Du hast ja eine 32Bit Anwendung, daher könnte es im ungünstigen Fall sein, dass dein Rechner von seinen 12GB Speicher noch 8GB Speicher frei hat, aber davon nichts mehr dem Prozess zur Verfügung gestellt werden kann, weil dieser seine 4GB Adressraum bereits nutzt.
Es wäre daher viel interessanter mal mitzuloggen, wie groß der zusammenhängend angeforderte Speicherbereich ist.
Naja doch...
Die Funktion 'GlobalMemoryStatusEx(&statex)' bezieht sich auf den
virtuellen Adressraum des Prozesses, welches ihn aufruft.
Sprich die 154MB freien Ressourcen gehören noch zu dem Adressraum
meines Prozesses.
-
Bitte ein Bit schrieb:
Dein Speicherverbauch würde mich jetzt (wie andere auch) interresieren.
Nicht dass du auf den Gedanken kommst sehr viel Speicher reservieren zu wollen obwohl du unter Win32 prinzipiell nur 2GByte zur Verfügung hast...
There are 3776 free MB of virtual memory //(Am Anfang)
There are 154 free MB of virtual memory //(Am Ende)Speicherverbrauch: 3776-154 = 3622 MB
Ca. Das wird mir auch von meinem 'ProzessExplorer' angezeigt.EDIT@Question: Kennt irgendjemand einen Programm, womit man die Speicherfragmentierung
unter Windows beobachten kann? Ich habe die Vermutung, dass die 154MB
nicht am Stück frei sind...So in etwa: ----++---+--+-+---++--+
(- = Belegter Speicher)
(+ = freier Speicher)in dem letzten Schritt, wo der Crash passiert werden 10MB angefordert, die dann nicht mehr allokiert werden können.
Ich danke nochmals jedem für die Antworten in diesem Thread, hat schon
wirklich einges gebracht und geholfen
So langsam komm ich der ganzen Sache immer näher!
-
Die Antwort habe ich Dir schon gegeben.
VMMAP.
Klick auf das Programm und schau Dir an was "Free" ist. Dor bekommst Du alle Segmente angezeigt...
-
Martin Richter schrieb:
Die Antwort habe ich Dir schon gegeben.
VMMAP.
Klick auf das Programm und schau Dir an was "Free" ist. Dor bekommst Du alle Segmente angezeigt...--> Wird sofort gemacht!
-
Nun war es wirklich so,
dass von den 154MB am Ende der längste freie Block nur noch 7,6MB war.
Jedoch wurde am Ende nochmals versucht 10MB zu reservieren.
-->VMMap ist ein Super mächtiges Tool
(An dem Punkt HERZLICHSTEN Dank an "Martin Richter")Nun muss ich nur noch den Algorithmus für die Speicherreservierung ändern,
aber das sollte dann auch weiter kein großes Problem mehr sein.
(evtl mit 'placement new')Aber auch vielen dank an alle anderen Thread-Teilnehmer
für eure Bemühungen!Gruß Kizane28!
-
Bau Dein Tool unter 64bit