Rolf B: Windows-API: Speicherverbrauch der laufenden Anwendung abfragen

Beitrag lesen

Hallo Martin,

Das Ziel ist, dass ein großer Teil der CRTL beim Linken als überflüssig (nicht benutzt) erkannt wird und rausfällt - im Idealfall die komplette Runtime. Das ergibt kleinen, kompakten Code.

Erkennt dein Linker das? Wird nicht vielmehr eine Referenz auf die msvcrt DLL gesetzt und die wird geladen? Oder gibt's auch heute noch ein auf obj-Ebene optimiertes, statisches Linken auf die Runtime Lib? Vor allem: Ist das relevant? Läufst Du derart hart am Speicherlimit, dass Du Dir das nicht erlauben kannst?

Zum Beispiel, dass ich mit HeapAlloc() maximal 0x7FFF8 Bytes am Stück anfordern kann. Das sind knapp 512kB.

Kommt drauf an. Da steht: „If the heap specified by the hHeap parameter is a "non-growable" heap, dwBytes must be less than 0x7FFF8. You create a non-growable heap by calling the HeapCreate function with a nonzero value.“

Deine App hat aber zunächst mal einen Default-Heap, auf dem sie rumturnt. Dessen Anfangsgröße legst Du beim Linken mit /HEAP fest, es ist standardmäßig 1MB, und er ist unlimitiert. D.h. die genannte Begrenzung existiert nicht.

Das sehe ich komplett anders. Wenn mir das Betriebssystem direkt eine API-Funktion für eine bestimmte Aufgabe bietet, dann nutze ich die auch direkt, anstatt vergleichbare CRTL-Funktionen, die dann irgendwann auch nur die API-Funktion aufrufen.

Hm. Normalerweise sind die CRT Funktionen für den Einsatz in der jeweiligen Sprache optimiert. Dinge wie ein Prozess-Handle sollten sie unter der Haube verwalten.

Der zweite Punkt ist, dass API Funktionen auch mal verschimmeln. Wie z.B. GlobalAlloc. Eine CRT Lib kapselt das.

Es scheitert immer daran, dass ich zuerst "meine eigene" Prozess-ID herausfinden muss, über deren Herkunft die API-Dokumentation den Mantel des Schweigens deckt.

Dann fragt man halt einen, der es weiß. Quack! Bei mir ist's der erste Treffer. Falls bei Dir nicht: hier.

De facto ist GetCurrentProcess ein Einzeiler: return (HANDLE)-1;. Aber man soll die Funktion trotzdem verwenden, falls MS das irgendwann mal ändern wird (werden sie nicht können, es wird zu viele Deppen geben, die die -1 hardcoded haben).

Oh Mann. Ich mach seit über 20 Jahren .net und fasse das WinAPI höchtens mit einer Kneifzange an. Und dann so ein Thema 😂

Rolf

--
sumpsi - posui - obstruxi