• [Foward]Reduce Exe File Size


    There are something that can be improved about those mentioned in the above article.

    First, The built release exe file are dependent on the msvrct.dll(build with vc++6.0) or msvcr71.dll(build with vc++2003) etc.

    Second, the exe file is about 3K, but this can still be reduced to about 1K.

    Solutions:
    1. The program doesn't use any c runtime library functions, except WinMainCRTStartup(the default program entry point). So if we assign our own entry point function, we can strip the c runtime library completely.
    Improvements:
    (1). Remove the msvcrt.lib in the vc++'s linker/input entry.
    (2). Add "#pragma comment(linker, "/Entry:WinMain")" just below "#include "stdafx.h"".

    2. For this program we can merge the .text section with .rdata section.
    Improvements:
    Add the following statement just under "#include "stdafx.h"":
    #pragma comment(linker, "/Merge:.rdata=.text")

    So the souce code is like:

    #include "stdafx.h"


    #pragma comment(linker, "/Entry:WinMain")
    #pragma comment(linker, "/OPT:NOWIN98")
    #pragma comment(linker, "/Merge:.rdata=.text")

    int APIENTRY WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow)
    {
    // TODO: Place code here.
    MessageBoxW(NULL, L"Hello World", L"Hello World", MB_OK);
    return 0;
    }

    AOTHER SOLUTION

    Create another similar project workspace, i.e. another "Hello World" project.

    Select active build configuration to be "Win32 Release".

    Open project setting and select the "Link" tab. Remove all the library file names from the "Object/library modules:" edit box and type "MSVCRT.LIB kernel32.lib user32.lib". Press OK and compile, the final exe file size is reduced to 16K. You might get a linker warning like "LINK : warning LNK4098: default lib "LIBC" conflicts with use of other libs; use /NODEFAULTLIB:library". This can be avoided by clicking "Ignore all default libraries" from the Link tab of Project Settings.

    The further magic is done by using /ALIGN linker option. You can see MSDN for further details about this linker option. Again go to the "Project Settings", "Link" tab. Type /ALIGN:4096 in the Project Options edit box. Press OK and rebuild your project. The size is further reduced to 3K. The compiler generates a linker warning "LINK : warning LNK4108: /ALIGN specified without /DRIVER or /VXD; image may not run". If you have followed my instructions properly, your exe file should run properly. I played around with the /ALIGN linker directive and figured out that if you use /ALIGN:4096 the produced exe file runs properly.



    That's it, we have reduced size of our Hello World app from 24K to 3K. There are some other options that you can try in this regard:
    You can run some symbol stripper utility on the final exe file. It helps reducing size in many cases. One such utility can be found at neoworx.com.

    There is a utility named ASPack, this utility also helps in compressing your exe files up to 50%.

  • 相关阅读:
    Octet string 解析
    c#之process类相关整理
    C# Process.Start()方法详解(转)
    c语言字符串比较函数strcmp
    C# 启动EXE文件及带启动参数EXE
    C语言中两个相等的char值比较 结果为false
    C语言strcmp()函数:比较字符串(区分大小写)
    char数组与char指针
    (转)在.net中序列化读写xml方法的总结
    PHP实现站点pv,uv统计(三)
  • 原文地址:https://www.cnblogs.com/Tue/p/1617256.html
Copyright © 2020-2023  润新知