关于文件大小的疑惑,附源代码,欢迎讨论
这几天想试着编写一些windows\system32下的小工具,选定了hostname.exe这个工具,大小为7.5k。通过反汇编看到这个程序主要使用了gethostname()和WSAStartup()这两个函数。自己也写了一个,功能倒是和原来的一样,不过release版本编译以后,大小28k。用的vc6.0里“最小文件size”的优化选项,比较郁闷。源代码如下:
#include "winsock2.h"
#include "stdio.h"
void main()
{
char hostname[200];
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2,0), &wsaData))
{
printf("WSAStartup failed %s\n", WSAGetLastError());
return;
}
if(gethostname(hostname, 200) != 0) printf("failed;;;\n");
printf("%s\n", hostname);
WSACleanup();
}
开始怀疑是编译时使用了Ws2_32.lib这个静态库的原因,去掉这个lib,换成直接显式调用Ws2_32.dll里的函数,大小还是没有变化。debug版本的居然有152k,release版本的还是28k。
最后用LCC编译了一下,发现包含debug信息的也不过10k左右,去掉debug信息以后,才3.03k。不知道vc release版本编译出来的到底多了什么。。。
向大家请教