Wie mache ich mein win32 Prog. kleiner?



  • ist sicher interessant, habs mir kurz angesehen, kam aber nichts dabei heraus, wer mich mal mit der materie befassen - danke



  • Was soll denn jetzt der Assembler-Quatsch? Mit was willst Du das vergleichen, mit SideWinders Beispiel? Wieviele DialogBoxen siehst Du denn da?

    Außerdem ist mit 16k noch lange nicht Ende der Fahnenstange. Ich habe SideWinders Code fast ohne Änderung in eine 2k exe compiliert (VC6).



  • ich vergleich garnichts, will einfach nur wissen woher diese 1024 k ram belegung bei einem normalen generierten hello world winapi kommen...



  • l00P schrieb:

    ich vergleich garnichts,

    Dich habe ich auch nicht gemeint.

    l00P schrieb:

    will einfach nur wissen woher diese 1024 k ram belegung bei einem normalen generierten hello world winapi kommen...

    Es werden eine ganze Reiche an Kernel- und User-Objekten erzeugt. Die brauchen nunmal Speicher. Deine MessageQueue bekommst Du auch nicht umsonst. Allein die GDI Handle-Table belegt 268K in Deinem Adressraum.

    Da aber auch viele Bereiche von verschieden Processen gemeinsam benutzt werden (z.B. die GDI Handle-Table), ist das wirklich kein Problem.

    [edit] Zusätzlich werden auch noch Dlls in Deinen Adressraum gemappt. In Deinem Fall mindestens user32.dll und kernel32.dll. Die belegen natürlich auch noch. [/edit]



  • -King- schrieb:

    Was soll denn jetzt der Assembler-Quatsch? Mit was willst Du das vergleichen, mit SideWinders Beispiel? Wieviele DialogBoxen siehst Du denn da?

    Außerdem ist mit 16k noch lange nicht Ende der Fahnenstange. Ich habe SideWinders Code fast ohne Änderung in eine 2k exe compiliert (VC6).

    Ich habs zwar vorhin bloß "schnell, schnell" optimiert aber auf 2k komm ich auch nicht runter - wie geht das? Was hast du da noch eingestellt?

    @King: Ihn interessiert ja auch gar nicht wie man den Speicherverbrauch verringern kann sondern warum es gerade 1024K sind - was imho jetzt geklärt ist: Rein zufällig, es könnten genauso gut 1025K sein.

    Diese Diskussion auf "Mach das Prog kleiner" hab ich angefangen, da ich zuerst an den Plattenplatz gedacht habe.

    MfG SideWinder



  • SideWinder schrieb:

    Ich habs zwar vorhin bloß "schnell, schnell" optimiert aber auf 2k komm ich auch nicht runter - wie geht das? Was hast du da noch eingestellt?

    Das Übliche:

    #pragma comment(linker, "/OPT:NOWIN98")
    #pragma comment(linker, "/MERGE:.rdata=.text")
    #pragma comment(linker, "/MERGE:.data=.text")
    
    #include <windows.h> 
    
    LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); 
    
    EXTERN_C int __cdecl WinMainCRTStartup(VOID)
    {
        ExitProcess(WinMain(GetModuleHandle(NULL), NULL, NULL, SW_SHOW));
    }
    
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int nShowCmd) 
    { 
        .
        .
        .
    

    Rein zufällig, es könnten genauso gut 1025K sein.

    Das nun gerade nicht, ein Vielfaches von 4K wird es schon sein. 😉



  • -King- schrieb:

    SideWinder schrieb:

    Ich habs zwar vorhin bloß "schnell, schnell" optimiert aber auf 2k komm ich auch nicht runter - wie geht das? Was hast du da noch eingestellt?

    Das Übliche:

    #pragma comment(linker, "/OPT:NOWIN98")
    #pragma comment(linker, "/MERGE:.rdata=.text")
    #pragma comment(linker, "/MERGE:.data=.text")
    
    #include <windows.h> 
     
    LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); 
     
    EXTERN_C int __cdecl WinMainCRTStartup(VOID)
    {
        ExitProcess(WinMain(GetModuleHandle(NULL), NULL, NULL, SW_SHOW));
    }
    
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int nShowCmd) 
    { 
        .
        .
        .
    

    Rein zufällig, es könnten genauso gut 1025K sein.

    Das nun gerade nicht, ein Vielfaches von 4K wird es schon sein. 😉

    Okay, okay ;).

    MfG SideWinder



  • aha, das heißt also kleinermachen wäre zu aufwendig und bringt nicht viel. Weißt du zufällig wie man ein Programm als Dienst laufen lassen kann und welche nachteile ich dadurch hätte? Ich muß nämlich ein logging tool schreiben das keine Oberfläche hat und maximal durch ein icon im Tray zu finden ist, wie würdest du das anstsellen??

    Gruß
    l00P



  • l00P schrieb:

    aha, das heißt also kleinermachen wäre zu aufwendig und bringt nicht viel. Weißt du zufällig wie man ein Programm als Dienst laufen lassen kann und welche nachteile ich dadurch hätte? Ich muß nämlich ein logging tool schreiben das keine Oberfläche hat und maximal durch ein icon im Tray zu finden ist, wie würdest du das anstsellen??

    Gruß
    l00P

    Das kommt drauf an: Soll das Tool ein Dienst sein oder nicht? Da liegt ja schon eine grundlegende Entscheidung die du treffen musst.

    MfG SideWinder



  • Durch einen Service hast Du keine Nachteile. Nur das mit dem Icon solltest Du Dir verkneifen. Ich halte nichts von Diensten, die mit dem User interagieren. Du bist besser dran, wenn Du Deinen Dienst frei von Fenstern hälst.

    Die Administratoren wissen auch so, wie sie den Dienst starten und stoppen können.


Anmelden zum Antworten