[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%.

转载于:https://www.cnblogs.com/Tue/archive/2009/12/04/1617256.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值