C++ Speicherleck beim Start

DonnyDepp

Lt. Commander
🎅Rätsel-Elite ’11
Registriert
März 2008
Beiträge
1.998
Hi,

ich bin gerade dabei ein größeres Projekt von MSVC6 auf VC2010 (und etliche andere externe bibliotheksanhebungen) zu portieren.
Nun sind alle Kompiler- und Linkerfehler/probleme behoben und die Module starten auch und funktionieren grundsätzlich erstmal.

Mein Problem ist nun, dass wenn eine .exe gestartet wird man sehen kann, wie im Prozessmanager diese exe sich zunehmends extrem Speicher reserviert, bevor überhaupt die main-Methode aufgerufen wird.
D.h. die Speicherbelegung wächst auf ca.960MB an, schrumpft dann auf "normalgröße" 3MB und die main startet.

Kennt diesen Effekt jemand und gibts dafür eine Lösung?
Oder weiß jemand wie man diesen Effekt nennt, um in google was dazu finden zu können?

Die ganzen Scripte zum kompilieren und linken sind ziemlich verfrickelt, also gut möglich, dass dort ein böses, steinaltes Flag drin ist.

Linkerbefehl:
cl -nologo -I. -ID:\MSVC10\VC\include -ID:\MSSDK\Include -I[diverse includes...] -DWIN32 -DOS_WIN32 -DCOMPILER_msc -D__WIN32__ -D__x86__ -D__NT__ -D__OSVERSION__=4 -DMSC_VER -DNOMINMAX -D__DLL__ -DUSE_WIN32_SHMEM=1 -X -w -EHsc -GR -FD -Zi -Od -Zi -MD -RTC1 -arch:SSE2 -D_CRT_SECURE_NO_DEPRECATE [etliche verlinkte libs...] -link -map -SUBSYSTEM:WINDOWS -nodefaultlib:LIBC -nodefaultlib:LIBCI -nodefaultlib:LIBCMTD -nodefaultlib:LIBCMT
 
passiert es denn auch wenn du die exe nicht in visual studio startest sondern im explorer?
 
die visual studio IDE wird gar nicht verwendet.
ich muss das in cygwin über clwrapper bauen, damit die shellscripte die ganzen projektkonfigurationen (sniff+) parsen können.
gestartet wirds nur im explorer.
 
Da du sicher code anfassen musstest: schau ob auch wirklich keine Statische initialisierung von irgendwas stattfindet. Wenn doch: schau dort in die entsprechenden Construktoren, diese werden VOR main aufgerufen.

Evtl. in jeden Constructor einfach eine "Debug" ausgabe rein um zu sehen das tatsächlich keiner davon aufgerufen wird.
 
stimmt, in den statics wurde alles vor der main initialisiert.
und da das logging erst in der main initialisiert wurde, haben die statics auch nix geloggt 8[

hab mit http://www.softwareverify.com/index.php analysiert, das zeigt einem sogar die stelle im code.
da wurden millionen von rwcstrings initialisiert wegen nem >> aufruf auf einen uninitialisiertem rwcstring...

gibts so´n tool wie softwareverify auch in kostenlos?
 
Zurück
Oben